mirror of https://github.com/mkerrisk/man-pages
Expand example program, and move it to new EXAMPLE section.
This commit is contained in:
parent
35bf3cc818
commit
185f68728f
104
man2/bind.2
104
man2/bind.2
|
@ -63,7 +63,7 @@
|
||||||
.\" $Id: bind.2,v 1.3 1999/04/23 19:56:07 freitag Exp $
|
.\" $Id: bind.2,v 1.3 1999/04/23 19:56:07 freitag Exp $
|
||||||
.\" Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
|
.\" Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
|
||||||
.\"
|
.\"
|
||||||
.TH BIND 2 2004-06-23 "Linux 2.6.7" "Linux Programmer's Manual"
|
.TH BIND 2 2007-06-08 "Linux" "Linux Programmer's Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
bind \- bind a name to a socket
|
bind \- bind a name to a socket
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
@ -147,48 +147,7 @@ The only purpose of this structure is to cast the structure
|
||||||
pointer passed in
|
pointer passed in
|
||||||
.I my_addr
|
.I my_addr
|
||||||
in order to avoid compiler warnings.
|
in order to avoid compiler warnings.
|
||||||
The following example shows how this is done when binding a socket
|
See EXAMPLE below.
|
||||||
in the Unix
|
|
||||||
.RB ( AF_UNIX )
|
|
||||||
domain:
|
|
||||||
|
|
||||||
.in +0.25in
|
|
||||||
.nf
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define MY_SOCK_PATH "/somepath"
|
|
||||||
|
|
||||||
int
|
|
||||||
main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int sfd;
|
|
||||||
struct sockaddr_un addr;
|
|
||||||
|
|
||||||
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
||||||
if (sfd == -1) {
|
|
||||||
perror("socket");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&addr, 0, sizeof(struct sockaddr_un));
|
|
||||||
/* Clear structure */
|
|
||||||
addr.sun_family = AF_UNIX;
|
|
||||||
strncpy(addr.sun_path, MY_SOCK_PATH,
|
|
||||||
sizeof(addr.sun_path) - 1);
|
|
||||||
|
|
||||||
if (bind(sfd, (struct sockaddr *) &addr,
|
|
||||||
sizeof(struct sockaddr_un)) == -1) {
|
|
||||||
perror("bind");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
...
|
|
||||||
}
|
|
||||||
.fi
|
|
||||||
.in -0.25in
|
|
||||||
.SH "RETURN VALUE"
|
.SH "RETURN VALUE"
|
||||||
On success, zero is returned.
|
On success, zero is returned.
|
||||||
On error, \-1 is returned, and
|
On error, \-1 is returned, and
|
||||||
|
@ -281,6 +240,65 @@ Some POSIX confusion resulted in the present
|
||||||
also used by glibc.
|
also used by glibc.
|
||||||
See also
|
See also
|
||||||
.BR accept (2).
|
.BR accept (2).
|
||||||
|
.SH EXAMPLE
|
||||||
|
.\" unix.7 refers to this example.
|
||||||
|
The following example shows how to bind a stream socket in the Unix
|
||||||
|
.RB ( AF_UNIX )
|
||||||
|
domain, and accept connections:
|
||||||
|
|
||||||
|
.in +0.25in
|
||||||
|
.nf
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define MY_SOCK_PATH "/somepath"
|
||||||
|
#define LISTEN_BACKLOG 50
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int sfd, cfd;
|
||||||
|
struct sockaddr_un my_addr, peer_addr;
|
||||||
|
socklen_t peer_addr_size;
|
||||||
|
|
||||||
|
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
|
if (sfd == -1) {
|
||||||
|
perror("socket");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&my_addr, 0, sizeof(struct sockaddr_un));
|
||||||
|
/* Clear structure */
|
||||||
|
my_addr.sun_family = AF_UNIX;
|
||||||
|
strncpy(my_addr.sun_path, MY_SOCK_PATH,
|
||||||
|
sizeof(my_addr.sun_path) - 1);
|
||||||
|
|
||||||
|
if (bind(sfd, (struct sockaddr *) &my_addr,
|
||||||
|
sizeof(struct sockaddr_un)) == -1) {
|
||||||
|
perror("bind");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(sfd, LISTEN_BACKLOG) == -1) {
|
||||||
|
perror("listen");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now we can accept incoming connections one
|
||||||
|
at a time using accept(2) */
|
||||||
|
|
||||||
|
peer_addr_size = sizeof(struct sockaddr_un);
|
||||||
|
cfd = accept(sfd, (struct sockaddr *) &peer_addr,
|
||||||
|
&peer_addr_size) == -1) {
|
||||||
|
perror("accept");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.fi
|
||||||
|
.in -0.25in
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
The transparent proxy options are not described.
|
The transparent proxy options are not described.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
|
Loading…
Reference in New Issue