---
name: "Wx::Socket"
section: "3pm"
platform: "linux"
package: "libwx-perl"
version: "1:0.9932-9+b2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Wx::Socket"
---

# Wx::Socket(3pm)

wxSocket\* classes

## NAME

Wx::Socket - wxSocket\* classes

## USAGE

```
  use Wx qw(:socket) ;
  use Wx::Event qw(EVT_SOCKET_INPUT EVT_SOCKET_LOST) ;
  use Wx::Event qw(EVT_SOCKET_CONNECTION) ;
  ##########
  # CLIENT #
  ##########
  my $sock = Wx::SocketClient->new(wxSOCKET_WAITALL);
  EVT_SOCKET_INPUT($parent , $sock , \&onInput ) ;
  EVT_SOCKET_LOST($parent , $sock , \&onClose ) ;
  $sock->Connect('localhost',5050) ;
  if (! $sock->IsConnected ) { print "ERROR\n" ;}
  sub onInput {
    my ( $sock , $this , $evt ) = @_ ;
    my $length = 123;
    my $buffer ;
    $sock->Read($buffer , 1024 , $length ) ;
  }
  ##########
  # SERVER #
  ##########
  my $sock = Wx::SocketServer->new('localhost',5050,wxSOCKET_WAITALL);
  EVT_SOCKET_CONNECTION($parent , $sock , \&onConnect ) ;
  if ( !$sock->Ok ) { print "ERROR\n" ;}
  sub onConnect {
    my ( $sock , $this , $evt ) = @_ ;
    my $client = $sock->Accept(0) ;
    my ($local_host,$local_port) = $client->GetLocal ;
    my ($peer_host,$peer_port) = $client->GetPeer ;
    $client->Write("This is a data test!\n") ;
```

... or ...

```
    $client->Write( $data , length($data) ) ;
    $client->Close ;
  }
```

## METHODS

All the methods work as in wxWidgets (see the documentation).

The functions for reading data (Read, ReadMsg, Peek) take 3 arguments, like the Perl **read()** function:

```
  ## To read the data into the variable
  $sock->Read($buffer , 1024) ;
```

... or ...

```
  ## To append data at the given offset:
  $sock->Read($buffer , 1024 , $offset ) ;
```

The write functions (Write, WriteMsg, Unread) can be used with 1 or 2 arguments:

```
  $client->Write("This is a data test!\n") ;
  $client->Write($data , $length) ;
```

## EVENTS

The events are:

```
    EVT_SOCKET
    EVT_SOCKET_ALL
    EVT_SOCKET_INPUT
    EVT_SOCKET_OUTPUT
    EVT_SOCKET_CONNECTION
    EVT_SOCKET_LOST
```

The EVT\_SOCKET works as in wxWidgets, the others are wxPerl extensions.

Note that EVT\_SOCKET events of wxSocketClient and wxSocketServer work differently than other event types.

First you need to set the event handler:

```
    $sock->SetEventHandler($handler, $id) ;
```

Then you set what types of event you want to receive:

```
    ## this select all.
    $sock->SetNotify(wxSOCKET_INPUT_FLAG|wxSOCKET_OUTPUT_FLAG|
                     wxSOCKET_CONNECTION_FLAG|wxSOCKET_LOST_FLAG) ;
```

Enable the event notification:

```
    $sock->Notify(1) ;
```

And only after this use:

```
    ## note that $handler must be the same that was used in
    ## SetEventHandler
    EVT_SOCKET($handler, $id , sub{...} )
```

To make the events easier to use, all the process is automatic, and you just use:

```
    EVT_SOCKET_INPUT($handler , $socket , sub{...} )
    EVT_SOCKET_OUTPUT($handler , $socket , sub{...} )
    EVT_SOCKET_CONNECTION($handler , $socket , sub{...} )
    EVT_SOCKET_LOST($handler , $socket , sub{...} )
    ## This is for the events not used yet by the above:
    EVT_SOCKET_ALL($parent , $socket , sub{...} )
```

\*\* The new way is better to handle more than one socket in the same time too.\
    Take a look in the demos.

## SEE ALSO

Wx, The wxWxwindows documentation at \<http://www.wxwindows.org/\>

## AUTHOR

Graciliano M. P. \<gm@virtuasites.com.br\>

## COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
