Socket module

accept

procedure6 overloadsSource

Takes the next pending connection from the listening socket s and returns it with the peer's IPv4 address.

A blocking listener waits for a connection. A non-blocking one returns INVALID_SOCKET at once when none is pending, and get_last_socket_error() then equals SOCKET_WOULDBLOCK; any other error also gives INVALID_SOCKET, with the address left zeroed. The returned socket is owned by the caller, who releases it with close_and_reset. Whether it starts in non-blocking mode depends on the platform, so call set_blocking to pick one explicitly. Use accept_v6 for a listener bound to an IPv6 address; an IPv4 record cannot hold an IPv6 peer.

Example
assert(socket_init());

listener := socket(AF_INET, .SOCK_STREAM, .TCP);
defer close_and_reset(*listener);

assert(bind(listener, "127.0.0.1", 0) == 0);
assert(listen(listener, 4) == 0);

local: sockaddr_in;
length: socklen_t = size_of(sockaddr_in);
assert(getsockname(listener, cast(*sockaddr) *local, *length) == 0);

client := socket(AF_INET, .SOCK_STREAM, .TCP);
defer close_and_reset(*client);
assert(connect(client, cast(*sockaddr) *local, length) == 0);

peer, from := accept(listener);
defer close_and_reset(*peer);

assert(peer != INVALID_SOCKET);
assert(from.sin_family == AF_INET);

Doesn't run in the browser (skipped on wasm).

accept :: (s: Socket) -> (Socket, sockaddr_in)

Parameters

Returns

accept :: (s: SOCKET, addr: *sockaddr, addrlen: *s32) -> SOCKET #foreign

Parameters

addr: *sockaddr
addrlen: *s32

Returns

accept :: (fd: s32, address: *sockaddr, length: *socklen_t) -> s32 #foreign

The calls WASI has, for a socket the host pre-opened (Extensions/Wasi_Runtime answers them).

Parameters

fd: s32
address: *sockaddr
length: *socklen_t

Returns

s32
accept :: (unknown0: s32, unknown1: *sockaddr, unknown2: *socklen_t) -> s32 #foreign

Parameters

unknown0: s32
unknown1: *sockaddr
unknown2: *socklen_t

Returns

s32
accept :: (__fd: s32, __addr: *sockaddr, __addr_len: *socklen_t) -> s32 #foreign

Parameters

__fd: s32
__addr: *sockaddr
__addr_len: *socklen_t

Returns

s32
accept :: (__fd: s32, __addr: *sockaddr, __addr_length: *socklen_t) -> s32 #foreign

Parameters

__fd: s32
__addr: *sockaddr
__addr_length: *socklen_t

Returns

s32

See also