
19 changed files with 453 additions and 2 deletions
-
2Makefile
-
2buffer/buffer_putsflush.c
-
33socket/socket_accept4.3
-
36socket/socket_accept6.3
-
30socket/socket_bind4.3
-
8socket/socket_bind4_reuse.c
-
30socket/socket_bind6.3
-
8socket/socket_bind6_reuse.c
-
29socket/socket_broadcast.3
-
48socket/socket_connect4.3
-
53socket/socket_connect6.3
-
32socket/socket_listen.3
-
16socket/socket_local4.3
-
19socket/socket_local6.3
-
19socket/socket_mcjoin4.3
-
16socket/socket_remote4.3
-
19socket/socket_remote6.3
-
29socket/socket_tcp.3
-
26socket/socket_tcp6.3
@ -0,0 +1,33 @@ |
|||
.TH socket_accept4 3 |
|||
.SH NAME |
|||
socket_accept4 \- accept an IPv4 TCP connection on a socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_accept4\fP(int \fIs\fR,char \fIip\fR[4],uint16 *\fIport\fR); |
|||
.SH DESCRIPTION |
|||
When a TCP connection arrives on a listening TCP socket \fIs\fR, the |
|||
socket becomes readable. |
|||
|
|||
socket_accept4 accepts the connection. It sets \fIip\fR and \fIport\fR |
|||
to the client IP address and client TCP port. It creates a new socket |
|||
for the connection, and returns a file descriptor pointing to the new |
|||
socket; you can use the read and write system calls to transmit data |
|||
through that file descriptor. |
|||
|
|||
If something goes wrong, socket_accept4 returns -1, setting errno |
|||
appropriately, without creating a new socket. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[4]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp(); |
|||
socket_bind4(s,ip,p); |
|||
socket_connect4(s,ip,p); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_accept6(3), socket_connected(3) |
@ -0,0 +1,36 @@ |
|||
.TH socket_accept6 3 |
|||
.SH NAME |
|||
socket_accept6 \- accept an IPv6 TCP connection on a socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_accept6\fP(int \fIs\fR,char \fIip\fR[16],uint16 *\fIport\fR,uint32 *\fIscope_id\fR); |
|||
.SH DESCRIPTION |
|||
When a TCP connection arrives on a listening TCP socket \fIs\fR, the |
|||
socket becomes readable. |
|||
|
|||
socket_accept6 accepts the connection. It sets \fIip\fR and \fIport\fR |
|||
to the client IP address and client TCP port and \fIscope_id\fR to the |
|||
IPv6 scope ID. It creates a new socket for the connection, and returns |
|||
a file descriptor pointing to the new socket; you can use the read and |
|||
write system calls to transmit data through that file descriptor. |
|||
|
|||
If \fIscope_id\fR is the null pointer, socket_accept6 will discard the |
|||
scope ID. |
|||
|
|||
If something goes wrong, socket_accept6 returns -1, setting errno |
|||
appropriately, without creating a new socket. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[16]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp6(); |
|||
socket_bind6(s,ip,p); |
|||
socket_connect6(s,ip,p); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_accept4(3), socket_connected(3) |
@ -0,0 +1,30 @@ |
|||
.TH socket_bind4 3 |
|||
.SH NAME |
|||
socket_bind4 \- set the local IP address and port of a socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_bind4\fP(int \fIs\fR,char \fIip\fR[4],uint16 \fIport\fR); |
|||
.SH DESCRIPTION |
|||
socket_bind4 sets the local IP address and TCP/UDP port of a TCP/UDP |
|||
socket \fIs\fR to \fIip\fR and \fIport\fR respectively. |
|||
|
|||
If the IP address is 0.0.0.0, the operating system chooses a local IP |
|||
address. If \fIport\fR is 0, the operating system chooses a port. |
|||
|
|||
Normally socket_bind4 returns 0. If anything goes wrong, socket_bind4 |
|||
returns -1, setting errno appropriately. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[4]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp(); |
|||
socket_bind4(s,ip,p); |
|||
socket_connect4(s,ip,p); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_bind6(3) |
@ -0,0 +1,8 @@ |
|||
#include <sys/socket.h> |
|||
#include "socket.h" |
|||
|
|||
int socket_bind4_reuse(int s,const char *ip,uint16 port) { |
|||
int one=1; |
|||
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&one,sizeof one); |
|||
return socket_bind4(s,ip,port); |
|||
} |
@ -0,0 +1,30 @@ |
|||
.TH socket_bind6 3 |
|||
.SH NAME |
|||
socket_bind6 \- set the local IP address and port of a socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_bind6\fP(int \fIs\fR,char \fIip\fR[16],uint16 \fIport\fR); |
|||
.SH DESCRIPTION |
|||
socket_bind6 sets the local IP address and TCP/UDP port of a TCP/UDP |
|||
socket \fIs\fR to \fIip\fR and \fIport\fR respectively. |
|||
|
|||
If the IP address is ::, the operating system chooses a local IP |
|||
address. If \fIport\fR is 0, the operating system chooses a port. |
|||
|
|||
Normally socket_bind6 returns 0. If anything goes wrong, socket_bind6 |
|||
returns -1, setting errno appropriately. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[16]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp6(); |
|||
socket_bind6(s,ip,p); |
|||
socket_connect6(s,ip,p); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_bind4(3) |
@ -0,0 +1,8 @@ |
|||
#include <sys/socket.h> |
|||
#include "socket.h" |
|||
|
|||
int socket_bind6_reuse(int s,const char *ip,uint16 port,uint32 scope_id) { |
|||
int one=1; |
|||
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&one,sizeof one); |
|||
return socket_bind6(s,ip,port,scope_id); |
|||
} |
@ -0,0 +1,29 @@ |
|||
.TH socket_broadcast 3 |
|||
.SH NAME |
|||
socket_broadcast \- set UDP socket to broadcast mode |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_broadcast\fP(int \fIs\fR); |
|||
.SH DESCRIPTION |
|||
socket_broadcast sets UDP socket \fIs\fR to broadcast mode. |
|||
socket_send4 and socket_send6 will fail to send packets to the broadcast |
|||
address unless socket_broadcast is called before. |
|||
|
|||
Normally socket_broadcast returns 0. |
|||
|
|||
If anything goes wrong, socket_broadcast returns -1, setting errno |
|||
appropriately. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
|
|||
if ((\fIs\fR=socket_udp6())==-1) |
|||
strerr_die2sys(111,FATAL,"unable to create UDP socket: "); |
|||
if (socket_broadcast(\fIs\fR) == -1) |
|||
strerr_die2sys(111,FATAL,"unable to set broadcast mode: "); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_send4(3), socket_send6(3) |
@ -0,0 +1,48 @@ |
|||
.TH socket_connect4 3 |
|||
.SH NAME |
|||
socket_connect4 \- attempt to make a TCP connection |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_connect4\fP(int \fIs\fR,char \fIip\fR[4],uint16 \fIport\fR); |
|||
.SH DESCRIPTION |
|||
socket_connect4 attempts to make a connection from TCP socket \fIs\fR to |
|||
TCP port \fIport\fR on IP address \fIip\fR. |
|||
|
|||
socket_connect4 may return |
|||
.sp 1 |
|||
.IP \(bu |
|||
0, to indicate that the connection succeeded (and succeeded immediately, |
|||
if the socket is non-blocking) |
|||
.IP \(bu |
|||
-1, setting errno to error_inprogress or error_wouldblock, to indicate |
|||
that the socket is non-blocking |
|||
.IP \(bu |
|||
-1, setting errno to something else, to indicate that the connection |
|||
failed (and failed immediately, if the socket is non-blocking). |
|||
.PP |
|||
|
|||
When a background connection succeeds or fails, \fIs\fR becomes |
|||
writable; you can use socket_connected to see whether the connection |
|||
succeeded. If the connection failed, socket_connected returns 0, |
|||
setting errno appropriately. |
|||
|
|||
Once a TCP socket is connected, you can use the read and write |
|||
system calls to transmit data. |
|||
|
|||
You can call socket_connect4 without calling socket_bind4. This has the |
|||
effect as first calling socket_bind4 with IP address 0.0.0.0 and port 0. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[4]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp(); |
|||
socket_bind4(s,ip,p); |
|||
socket_connect4(s,ip,p); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_connect6(3) |
@ -0,0 +1,53 @@ |
|||
.TH socket_connect6 3 |
|||
.SH NAME |
|||
socket_connect6 \- attempt to make a TCP connection |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_connect6\fP(int \fIs\fR,char \fIip\fR[16],uint16 \fIport\fR,uint32 \fIscope_id\fR); |
|||
.SH DESCRIPTION |
|||
socket_connect6 attempts to make a connection from TCP socket \fIs\fR to |
|||
TCP port \fIport\fR on IP address \fIip\fR. |
|||
|
|||
The meaning of \fIscope_id\fR is dependent on the implementation and |
|||
IPv6 IP. On link-local IPv6 addresses it specifies the outgoing |
|||
interface index. The name (e.g. "eth0") for a given interface index can |
|||
be queried with getifname. \fIscope_id\fR should normally be set to 0. |
|||
|
|||
socket_connect6 may return |
|||
.sp 1 |
|||
.IP \(bu |
|||
0, to indicate that the connection succeeded (and succeeded immediately, |
|||
if the socket is non-blocking) |
|||
.IP \(bu |
|||
-1, setting errno to error_inprogress or error_wouldblock, to indicate |
|||
that the socket is non-blocking |
|||
.IP \(bu |
|||
-1, setting errno to something else, to indicate that the connection |
|||
failed (and failed immediately, if the socket is non-blocking). |
|||
.PP |
|||
|
|||
When a background connection succeeds or fails, \fIs\fR becomes |
|||
writable; you can use socket_connected to see whether the connection |
|||
succeeded. If the connection failed, socket_connected returns 0, |
|||
setting errno appropriately. |
|||
|
|||
Once a TCP socket is connected, you can use the read and write |
|||
system calls to transmit data. |
|||
|
|||
You can call socket_connect6 without calling socket_bind6. This has the |
|||
effect as first calling socket_bind6 with IP address :: and port 0. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[16]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp6(); |
|||
socket_bind6(s,ip,p); |
|||
socket_connect6(s,ip,p,0); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_connect4(3), socket_getifname(3) |
@ -0,0 +1,32 @@ |
|||
.TH socket_listen 3 |
|||
.SH NAME |
|||
socket_listen \- attempt to make a TCP connection |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_listen\fP(int \fIs\fR,int \fIn\fR); |
|||
.SH DESCRIPTION |
|||
socket_listen prepares TCP socket \fIs\fR to accept TCP connections. It |
|||
allows a backlog of approximately \fIn\fR TCP SYNs. (On systems |
|||
supporting SYN cookies, the backlog is irrelevant.) Normally |
|||
socket_listen returns 0. |
|||
|
|||
If anything goes wrong, socket_listen returns -1, setting errno |
|||
appropriately. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[16]; |
|||
uint16 \fIp\fR; |
|||
|
|||
if ((\fIs\fR=socket_tcp6())==-1) |
|||
strerr_die2sys(111,FATAL,"unable to create TCP socket: "); |
|||
if (socket_bind6_reuse(\fIs\fR,(char *)V6any,8002,0) == -1) |
|||
strerr_die2sys(111,FATAL,"unable to bind: "); |
|||
if (socket_listen(\fIs\fR,1) == -1) |
|||
strerr_die2sys(111,FATAL,"unable to listen: "); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_connect4(3), socket_connect6(3) |
@ -0,0 +1,16 @@ |
|||
.TH socket_local4 3 |
|||
.SH NAME |
|||
socket_local4 \- get local IP address of socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_local4\fP(int \fIs\fR,char \fIip\fR[4],uint16 *\fIport\fR); |
|||
.SH DESCRIPTION |
|||
socket_local4 returns the local IP address and port for the UDP or TCP |
|||
socket \fIs\fR and writes the IP address to \fIip\fR and the port to |
|||
\fIport\fR. |
|||
|
|||
If something goes wrong, socket_local4 returns -1, setting errno |
|||
appropriately. |
|||
.SH "SEE ALSO" |
|||
socket_accept4(3), socket_remote4(3) |
@ -0,0 +1,19 @@ |
|||
.TH socket_local6 3 |
|||
.SH NAME |
|||
socket_local6 \- get local IP address of socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_local6\fP(int \fIs\fR,char \fIip\fR[16],uint16 *\fIport\fR,uint32 *\fIscope_id\fR); |
|||
.SH DESCRIPTION |
|||
socket_local6 returns the local IPv6 address, port and scope ID for the |
|||
UDP or TCP socket \fIs\fR and writes the IPv6 address to \fIip\fR, the |
|||
port to \fIport\fR and the scope ID to \fIscope_id\fR. |
|||
|
|||
If \fIscope_id\fR is the null pointer, socket_local6 will discard the |
|||
scope ID. |
|||
|
|||
If something goes wrong, socket_local6 returns -1, setting errno |
|||
appropriately. |
|||
.SH "SEE ALSO" |
|||
socket_accept6(3), socket_remote6(3) |
@ -0,0 +1,19 @@ |
|||
.TH socket_mcjoin4 3 |
|||
.SH NAME |
|||
socket_mcjoin4 \- join a multicast group |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_mcjoin4\fP(int \fIs\fR,const char \fIgroupip\fR[4],const char \fIinterface\fR[4]); |
|||
.SH DESCRIPTION |
|||
socket_mcjoin4 joins the IPv4 multicast group \fIgroupip\fR on \fIinterface\fR. |
|||
|
|||
TODO |
|||
|
|||
socket \fIs\fR and writes the IP address to \fIip\fR and the port to |
|||
\fIport\fR. |
|||
|
|||
If something goes wrong, socket_local4 returns -1, setting errno |
|||
appropriately. |
|||
.SH "SEE ALSO" |
|||
socket_accept4(3), socket_remote4(3) |
@ -0,0 +1,16 @@ |
|||
.TH socket_remote4 3 |
|||
.SH NAME |
|||
socket_remote4 \- get remote IP address of socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_remote4\fP(int \fIs\fR,char \fIip\fR[4],uint16 *\fIport\fR); |
|||
.SH DESCRIPTION |
|||
socket_remote4 returns the remote IP address and port for the UDP or TCP |
|||
socket \fIs\fR and writes the IP address to \fIip\fR and the port to |
|||
\fIport\fR. |
|||
|
|||
If something goes wrong, socket_remote4 returns -1, setting errno |
|||
appropriately. |
|||
.SH "SEE ALSO" |
|||
socket_accept4(3), socket_local4(3) |
@ -0,0 +1,19 @@ |
|||
.TH socket_remote6 3 |
|||
.SH NAME |
|||
socket_remote6 \- get remote IP address of socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_remote6\fP(int \fIs\fR,char \fIip\fR[16],uint16 *\fIport\fR,uint32 *\fIscope_id\fR); |
|||
.SH DESCRIPTION |
|||
socket_remote6 returns the remote IPv6 address, port and scope ID for the |
|||
UDP or TCP socket \fIs\fR and writes the IPv6 address to \fIip\fR, the |
|||
port to \fIport\fR and the scope ID to \fIscope_id\fR. |
|||
|
|||
If \fIscope_id\fR is the null pointer, socket_remote6 will discard the |
|||
scope ID. |
|||
|
|||
If something goes wrong, socket_remote6 returns -1, setting errno |
|||
appropriately. |
|||
.SH "SEE ALSO" |
|||
socket_accept6(3), socket_local6(3) |
@ -0,0 +1,29 @@ |
|||
.TH socket_tcp 3 |
|||
.SH NAME |
|||
socket_tcp \- create a non-blocking TCP/IP stream socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_tcp\fP(); |
|||
.SH DESCRIPTION |
|||
socket_tcp creates a non-blocking TCP/IP stream socket and returns a |
|||
file descriptor pointing to that socket. If something goes wrong, |
|||
socket_tcp returns -1, setting errno appropriately, without allocating |
|||
any resources. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[4]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp(); |
|||
socket_bind4(s,ip,p); |
|||
socket_connect4(s,ip,p); |
|||
|
|||
.SH BUGS |
|||
It is called socket_tcp instead of socket_tcp4 to be compatible with DJ |
|||
Bernstein's original implementation. |
|||
.SH "SEE ALSO" |
|||
socket_bind4(3), socket_bind6(3) |
@ -0,0 +1,26 @@ |
|||
.TH socket_tcp6 3 |
|||
.SH NAME |
|||
socket_tcp \- create a non-blocking IPv6 TCP/IP stream socket |
|||
.SH SYNTAX |
|||
.B #include <socket.h> |
|||
|
|||
int \fBsocket_tcp6\fP(); |
|||
.SH DESCRIPTION |
|||
socket_tcp creates a non-blocking IPv6 TCP/IP stream socket and returns a |
|||
file descriptor pointing to that socket. If something goes wrong, |
|||
socket_tcp returns -1, setting errno appropriately, without allocating |
|||
any resources. |
|||
|
|||
.SH EXAMPLE |
|||
#include <socket.h> |
|||
|
|||
int \fIs\fR; |
|||
char \fIip\fR[16]; |
|||
uint16 \fIp\fR; |
|||
|
|||
\fIs\fR = socket_tcp6(); |
|||
socket_bind6(s,ip,p); |
|||
socket_connect6(s,ip,p,0); |
|||
|
|||
.SH "SEE ALSO" |
|||
socket_bind4(3), socket_bind6(3) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue