¡@ | |
|
accept¡]±µ¨üsocket³s½u¡^ |
¬ÛÃö¨ç¼Æ
|
socket¡Abind¡Alisten¡Aconnect |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int accept(int s,struct sockaddr
* addr,int * addrlen); |
¨ç¼Æ»¡©ú
|
accept()¥Î¨Ó±µ¨ü°Ñ¼Æsªºsocket³s½u¡C°Ñ¼Æsªºsocket¥²»Ý¥ý¸gbind()¡Blisten()¨ç¼Æ³B²z¹L¡A·í¦³³s½u¶i¨Ó®Éaccept()·|ªð¦^¤@Ó·sªºsocket³B²z¥N½X¡A©¹«áªº¼Æ¾Ú¶Ç°e»PŪ¨ú´N¬O¸g¥Ñ·sªºsocket³B²z¡A¦Óì¨Ó°Ñ¼Æsªºsocket¯àÄ~Äò¨Ï¥Îaccept()¨Ó±µ¨ü·sªº³s½un¨D¡C³s½u¦¨¥\®É¡A°Ñ¼Æaddr©Ò«üªºµ²ºc·|³Q¨t²Î¶ñ¤J»·µ{¥D¾÷ªº¦a§}¼Æ¾Ú¡A°Ñ¼Æaddrlen¬°scokaddrªºµ²ºcªø«×¡CÃö©óµ²ºcsockaddrªº©w¸q½Ð°Ñ¦Òbind()¡C |
ªð¦^È
|
¦¨¥\«hªð¦^·sªºsocket³B²z¥N½X¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs «D¦Xªksocket³B²z¥N½X¡C EFAULT °Ñ¼Æaddr«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡¡C ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EOPNOTSUPP «ü©wªºsocket¨Ã«DSOCK_STREAM¡C EPERM ¨¾¤õùÙ©Úµ´¦¹³s½u¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬¡C ENOMEM ®Ö¤ß¤º¦s¤£¨¬¡C |
½d¨Ò
|
°Ñ¦Òlisten()¡C |
¡@ | |
|
bind¡]¹ïsocket©w¦ì¡^ |
¬ÛÃö¨ç¼Æ
|
socket¡Aaccept¡Aconnect¡Alisten |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int bind(int sockfd,struct sockaddr
* my_addr,int addrlen); |
¨ç¼Æ»¡©ú
|
bind()¥Î¨Ó³]¸mµ¹°Ñ¼Æsockfdªºsocket¤@Ó¦WºÙ¡C¦¹¦WºÙ¥Ñ°Ñ¼Æmy_addr«ü¦V¤@sockaddrµ²ºc¡A¹ï©ó¤£¦Pªºsocket
domain©w¸q¤F¤@Ó³q¥Îªº¼Æ¾Úµ²ºc struct sockaddr { unsigned short int sa_family; char sa_data[14]; }; sa_family ¬°½Õ¥Îsocket¡]¡^®Éªºdomain°Ñ¼Æ¡A§YAF_xxxxÈ¡C sa_data ³Ì¦h¨Ï¥Î14Ó¦r²Åªø«×¡C ¦¹sockaddrµ²ºc·|¦]¨Ï¥Î¤£¦Pªºsocket domain¦Ó¦³¤£¦Pµ²ºc©w¸q¡A¨Ò¦p¨Ï¥ÎAF_INET domain¡A¨äsocketaddrµ²ºc©w¸q«K¬° struct socketaddr_in { unsigned short int sin_family; uint16_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; }; struct in_addr { uint32_t s_addr; }; sin_family §Y¬°sa_family sin_port ¬°¨Ï¥Îªºport½s¸¹ sin_addr.s_addr ¬°IP ¦a§} sin_zero ¥¼¨Ï¥Î¡C |
°Ñ¼Æ
|
addrlen¬°sockaddrªºµ²ºcªø«×¡C |
ªð¦^È
|
¦¨¥\«hªð¦^0¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æsockfd «D¦Xªksocket³B²z¥N½X¡C EACCESS Åv¤£¨¬ ENOTSOCK °Ñ¼Æsockfd¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C |
½d¨Ò
|
°Ñ¦Òlisten() |
¡@ | |
|
connect¡]«Ø¥ßsocket³s½u¡^ |
¬ÛÃö¨ç¼Æ
|
socket¡Abind¡Alisten |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int connect (int sockfd,struct
sockaddr * serv_addr,int addrlen); |
¨ç¼Æ»¡©ú
|
connect()¥Î¨Ó±N°Ñ¼Æsockfd ªºsocket ³s¦Ü°Ñ¼Æserv_addr
«ü©wªººôµ¸¦a§}¡Cµ²ºcsockaddr½Ð°Ñ¦Òbind()¡C°Ñ¼Æaddrlen¬°sockaddrªºµ²ºcªø«×¡C |
ªð¦^È
|
¦¨¥\«hªð¦^0¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æsockfd «D¦Xªksocket³B²z¥N½X EFAULT °Ñ¼Æserv_addr«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ ENOTSOCK °Ñ¼Æsockfd¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EISCONN °Ñ¼Æsockfdªºsocket¤w¬O³s½uª¬ºA ECONNREFUSED ³s½un¨D³QserverºÝ©Úµ´¡C ETIMEDOUT ¥ø¹Ï³s½uªº¾Þ§@¶W¹L©w®É¶¡¤´¥¼¦³ÅTÀ³¡C ENETUNREACH µLªk¶Ç°e¼Æ¾Ú¥]¦Ü«ü©wªº¥D¾÷¡C EAFNOSUPPORT sockaddrµ²ºcªºsa_family¤£¥¿½T¡C EALREADY socket¬°¤£¥iªýÂ_¥B¥ý«eªº³s½u¾Þ§@ÁÙ¥¼§¹¦¨¡C |
½d¨Ò
|
/* §Q¥ÎsocketªºTCP client ¦¹µ{§Ç·|³s½uTCP server¡A¨Ã±NÁä½L¿é¤Jªº¦r²Å¦ê¶Ç°eµ¹server¡C TCP server½d¨Ò½Ð°Ñ¦Òlisten¡]¡^¡C */ #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #define PORT 1234 #define SERVER_IP ¡§127.0.0.1¡¨ main() { int s; struct sockaddr_in addr; char buffer[256]; if((s = socket(AF_INET,SOCK_STREAM,0))<0){ perror(¡§socket¡¨); exit(1); } /* ¶ñ¼gsockaddr_inµ²ºc*/ bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); /* ¹Á¸Õ³s½u*/ if(connect(s,&addr,sizeof(addr))<0){ perror(¡§connect¡¨); exit(1); } /* ±µ¦¬¥ÑserverºÝ¶Ç¨Óªº«H®§*/ recv(s,buffer,sizeof(buffer),0); printf(¡§%s\n¡¨,buffer); while(1){ bzero(buffer,sizeof(buffer)); /* ±q¼Ð·Ç¿é¤J³]³Æ¨ú±o¦r²Å¦ê*/ read(STDIN_FILENO,buffer,sizeof(buffer)); /* ±N¦r²Å¦ê¶Çµ¹serverºÝ*/ if(send(s,buffer,sizeof(buffer),0)<0){ perror(¡§send¡¨); exit(1); } } } |
°õ¦æ
|
$ ./connect Welcome to server! hi I am client! /*Áä½L¿é¤J*/ /*<Ctrl+C>¤¤Â_µ{§Ç*/ |
¡@ | |
|
endprotoent¡]µ²§ôºôµ¸¨óij¼Æ¾ÚªºÅª¨ú¡^ |
¬ÛÃö¨ç¼Æ
|
getprotoent¡Agetprotobyname¡Agetprotobynumber¡Asetprotoent |
ªíÀY¤å¥ó
|
#include<netdb.h> |
©w¸q¨ç¼Æ
|
void endprotoent(void); |
¨ç¼Æ»¡©ú
|
endprotoent()¥Î¨ÓÃö³¬¥Ñgetprotoent()¥´¶}ªº¤å¥ó¡C |
ªð¦^È
|
|
½d¨Ò
|
°Ñ¦Ògetprotoent() |
¡@ | |
|
endservent¡]µ²§ôºôµ¸ªA°È¼Æ¾ÚªºÅª¨ú¡^ |
¬ÛÃö¨ç¼Æ
|
getservent¡Agetservbyname¡Agetservbyport¡Asetservent |
ªíÀY¤å¥ó
|
#include<netdb.h> |
©w¸q¨ç¼Æ
|
void endservent(void); |
¨ç¼Æ»¡©ú
|
endservent()¥Î¨ÓÃö³¬¥Ñgetservent()©Ò¥´¶}ªº¤å¥ó¡C |
ªð¦^È
|
|
½d¨Ò
|
°Ñ¦Ògetservent()¡C |
¡@ | |
|
getsockopt¡]¨ú±osocketª¬ºA¡^ |
¬ÛÃö¨ç¼Æ
|
setsockopt |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int getsockopt(int s,int level,int
optname,void* optval,socklen_t* optlen); |
¨ç¼Æ»¡©ú
|
getsockopt()·|±N°Ñ¼Æs©Ò«ü©wªºsocketª¬ºAªð¦^¡C°Ñ¼Æoptname¥Nªí±ý¨ú±o¦óºØ¿ï¶µª¬ºA¡A¦Ó°Ñ¼Æoptval«h«ü¦V±ý«O¦sµ²ªGªº¤º¦s¦a§}¡A°Ñ¼Æoptlen«h¬°¸ÓªÅ¶¡ªº¤j¤p¡C°Ñ¼Ælevel¡Boptname½Ð°Ñ¦Òsetsockopt()¡C |
ªð¦^È
|
¦¨¥\«hªð¦^0¡AY¦³¿ù»~«hªð¦^-1¡A¿ù»~ì¦]¦s©óerrno |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs ¨Ã«D¦Xªkªºsocket³B²z¥N½X ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket ENOPROTOOPT °Ñ¼Æoptname«ü©wªº¿ï¶µ¤£¥¿½T EFAULT °Ñ¼Æoptval«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ |
½d¨Ò
|
#include<sys/types.h> #include<sys/socket.h> main() { int s,optval,optlen = sizeof(int); if((s = socket(AF_INET,SOCK_STREAM,0))<0) perror(¡§socket¡¨); getsockopt(s,SOL_SOCKET,SO_TYPE,&optval,&optlen); printf(¡§optval = %d\n¡¨,optval); close(s);} |
°õ¦æ
|
optval = 1 /*SOCK_STREAMªº©w¸q¥¿¬O¦¹È*/ |
¡@ | |
|
htonl¡]±N32¦ì¥D¾÷¦r²Å¶¶§ÇÂà´«¦¨ºôµ¸¦r²Å¶¶§Ç¡^ |
¬ÛÃö¨ç¼Æ
|
htons¡Antohl¡Antohs |
ªíÀY¤å¥ó
|
#include<netinet/in.h> |
©w¸q¨ç¼Æ
|
unsigned long int htonl(unsigned
long int hostlong); |
¨ç¼Æ»¡©ú
|
htonl¡]¡^¥Î¨Ó±N°Ñ¼Æ«ü©wªº32¦ìhostlong Âà´«¦¨ºôµ¸¦r²Å¶¶§Ç¡C |
ªð¦^È
|
ªð¦^¹ïÀ³ªººôµ¸¦r²Å¶¶§Ç¡C |
½d¨Ò
|
°Ñ¦Ògetservbyport()©Îconnect()¡C |
¡@ | |
|
htons¡]±N16¦ì¥D¾÷¦r²Å¶¶§ÇÂà´«¦¨ºôµ¸¦r²Å¶¶§Ç¡^ |
¬ÛÃö¨ç¼Æ
|
htonl¡Antohl¡Antohs |
ªíÀY¤å¥ó
|
#include<netinet/in.h> |
©w¸q¨ç¼Æ
|
unsigned short int htons(unsigned
short int hostshort); |
¨ç¼Æ»¡©ú
|
htons()¥Î¨Ó±N°Ñ¼Æ«ü©wªº16¦ìhostshortÂà´«¦¨ºôµ¸¦r²Å¶¶§Ç¡C |
ªð¦^È
|
ªð¦^¹ïÀ³ªººôµ¸¦r²Å¶¶§Ç¡C |
½d¨Ò
|
°Ñ¦Òconnect()¡C |
¡@ | |
|
inet_addr¡]±Nºôµ¸¦a§}Âন¤G¶i¨îªº¼Æ¦r¡^ |
¬ÛÃö¨ç¼Æ
|
inet_aton¡Ainet_ntoa |
ªíÀY¤å¥ó
|
#include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> |
©w¸q¨ç¼Æ
|
unsigned long int inet_addr(const
char *cp); |
¨ç¼Æ»¡©ú
|
inet_addr()¥Î¨Ó±N°Ñ¼Æcp©Ò«üªººôµ¸¦a§}¦r²Å¦êÂà´«¦¨ºôµ¸©Ò¨Ï¥Îªº¤G¶i¨î¼Æ¦r¡Cºôµ¸¦a§}¦r²Å¦ê¬O¥H¼Æ¦r©MÂI²Õ¦¨ªº¦r²Å¦ê¡A¨Ò¦p:¡§163.13.132.68¡¨¡C |
ªð¦^È
|
¦¨¥\«hªð¦^¹ïÀ³ªººôµ¸¤G¶i¨îªº¼Æ¦r¡A¥¢±Ñªð¦^-1¡C |
¡@ | |
|
inet_aton¡]±Nºôµ¸¦a§}Âনºôµ¸¤G¶i¨îªº¼Æ¦r¡^ |
¬ÛÃö¨ç¼Æ
|
inet_addr¡Ainet_ntoa |
ªíÀY¤å¥ó
|
#include<sys/scoket.h> #include<netinet/in.h> #include<arpa/inet.h> |
©w¸q¨ç¼Æ
|
int inet_aton(const char * cp,struct
in_addr *inp); |
¨ç¼Æ»¡©ú
|
inet_aton()¥Î¨Ó±N°Ñ¼Æcp©Ò«üªººôµ¸¦a§}¦r²Å¦êÂà´«¦¨ºôµ¸¨Ï¥Îªº¤G¶i¨îªº¼Æ¦r¡AµM«á¦s©ó°Ñ¼Æinp©Ò«üªºin_addrµ²ºc¤¤¡C µ²ºcin_addr©w¸q¦p¤U struct in_addr { unsigned long int s_addr; }; |
ªð¦^È
|
¦¨¥\«hªð¦^«D0È¡A¥¢±Ñ«hªð¦^0¡C |
¡@ | |
|
inet_ntoa¡]±Nºôµ¸¤G¶i¨îªº¼Æ¦rÂà´«¦¨ºôµ¸¦a§}¡^ |
¬ÛÃö¨ç¼Æ
|
inet_addr¡Ainet_aton |
ªíÀY¤å¥ó
|
#include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> |
©w¸q¨ç¼Æ
|
char * inet_ntoa(struct in_addr
in); |
¨ç¼Æ»¡©ú
|
inet_ntoa()¥Î¨Ó±N°Ñ¼Æin©Ò«üªººôµ¸¤G¶i¨îªº¼Æ¦rÂà´«¦¨ºôµ¸¦a§}¡AµM«á±N«ü¦V¦¹ºôµ¸¦a§}¦r²Å¦êªº«ü°wªð¦^¡C |
ªð¦^È
|
¦¨¥\«hªð¦^¦r²Å¦ê«ü°w¡A¥¢±Ñ«hªð¦^NULL¡C |
¡@ | |
|
listen¡]µ¥«Ý³s±µ¡^ |
¬ÛÃö¨ç¼Æ
|
socket¡Abind¡Aaccept¡Aconnect |
ªíÀY¤å¥ó
|
#include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int listen(int s,int backlog); |
¨ç¼Æ»¡©ú
|
listen()¥Î¨Óµ¥«Ý°Ñ¼Æs ªºsocket³s½u¡C°Ñ¼Æbacklog«ü©w¦P®É¯à³B²zªº³Ì¤j³s±µn¨D¡A¦pªG³s±µ¼Æ¥Ø¹F¦¹¤W«hclientºÝ±N¦¬¨ìECONNREFUSEDªº¿ù»~¡CListen()¨Ã¥¼¶}©l±µ¦¬³s½u¡A¥u¬O³]¸msocket¬°listen¼Ò¦¡¡A¯u¥¿±µ¦¬clientºÝ³s½uªº¬Oaccept()¡C³q±`listen()·|¦bsocket()¡Abind()¤§«á½Õ¥Î¡A±µµÛ¤~½Õ¥Îaccept()¡C |
ªð¦^È
|
¦¨¥\«hªð¦^0¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno |
ªþ¥[»¡©ú
|
listen()¥u¾A¥ÎSOCK_STREAM©ÎSOCK_SEQPACKETªºsocketÃþ«¬¡C¦pªGsocket¬°AF_INET«h°Ñ¼Æbacklog
³Ì¤jÈ¥i³]¦Ü128¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æsockfd«D¦Xªksocket³B²z¥N½X EACCESS Åv¤£¨¬ EOPNOTSUPP «ü©wªºsocket¨Ã¥¼¤ä´©listen¼Ò¦¡¡C |
½d¨Ò
|
#include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 1234 #define MAXSOCKFD 10 main() { int sockfd,newsockfd,is_connected[MAXSOCKFD],fd; struct sockaddr_in addr; int addr_len = sizeof(struct sockaddr_in); fd_set readfds; char buffer[256]; char msg[ ] =¡¨Welcome to server!¡¨; if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0){ perror(¡§socket¡¨); exit(1); } bzero(&addr,sizeof(addr)); addr.sin_family =AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sockfd,&addr,sizeof(addr))<0){ perror(¡§connect¡¨); exit(1); } if(listen(sockfd,3)<0){ perror(¡§listen¡¨); exit(1); } for(fd=0;fd<MAXSOCKFD;fd++) is_connected[fd]=0; while(1){ FD_ZERO(&readfds); FD_SET(sockfd,&readfds); for(fd=0;fd<MAXSOCKFD;fd++) if(is_connected[fd]) FD_SET(fd,&readfds); if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL))continue; for(fd=0;fd<MAXSOCKFD;fd++) if(FD_ISSET(fd,&readfds)){ if(sockfd = =fd){ if((newsockfd = accept (sockfd,&addr,&addr_len))<0) perror(¡§accept¡¨); write(newsockfd,msg,sizeof(msg)); is_connected[newsockfd] =1; printf(¡§cnnect from %s\n¡¨,inet_ntoa(addr.sin_addr)); }else{ bzero(buffer,sizeof(buffer)); if(read(fd,buffer,sizeof(buffer))<=0){ printf(¡§connect closed.\n¡¨); is_connected[fd]=0; close(fd); }else printf(¡§%s¡¨,buffer); } } } } |
°õ¦æ
|
$ ./listen connect from 127.0.0.1 hi I am client connected closed. |
¡@ | |
|
ntohl¡]±N32¦ìºôµ¸¦r²Å¶¶§ÇÂà´«¦¨¥D¾÷¦r²Å¶¶§Ç¡^ |
¬ÛÃö¨ç¼Æ
|
htonl¡Ahtons¡Antohs |
ªíÀY¤å¥ó
|
#include<netinet/in.h> |
©w¸q¨ç¼Æ
|
unsigned long int ntohl(unsigned
long int netlong); |
¨ç¼Æ»¡©ú
|
ntohl()¥Î¨Ó±N°Ñ¼Æ«ü©wªº32¦ìnetlongÂà´«¦¨¥D¾÷¦r²Å¶¶§Ç¡C |
ªð¦^È
|
ªð¦^¹ïÀ³ªº¥D¾÷¦r²Å¶¶§Ç¡C |
½d¨Ò
|
°Ñ¦Ògetservent()¡C |
¡@ | |
|
ntohs¡]±N16¦ìºôµ¸¦r²Å¶¶§ÇÂà´«¦¨¥D¾÷¦r²Å¶¶§Ç¡^ |
¬ÛÃö¨ç¼Æ
|
htonl¡Ahtons¡Antohl |
ªíÀY¤å¥ó
|
#include<netinet/in.h> |
©w¸q¨ç¼Æ
|
unsigned short int ntohs(unsigned
short int netshort); |
¨ç¼Æ»¡©ú
|
ntohs()¥Î¨Ó±N°Ñ¼Æ«ü©wªº16¦ìnetshortÂà´«¦¨¥D¾÷¦r²Å¶¶§Ç¡C |
ªð¦^È
|
ªð¦^¹ïÀ³ªº¥D¾÷¶¶§Ç¡C |
½d¨Ò
|
°Ñ¦Ògetservent()¡C |
¡@ | |
|
recv¡]¸gsocket±µ¦¬¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
recvfrom¡Arecvmsg¡Asend¡Asendto¡Asocket |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int recv(int s,void *buf,int len,unsigned
int flags); |
¨ç¼Æ»¡©ú
|
recv()¥Î¨Ó±µ¦¬»·ºÝ¥D¾÷¸g«ü©wªºsocket¶Ç¨Óªº¼Æ¾Ú¡A¨Ã§â¼Æ¾Ú¦s¨ì¥Ñ°Ñ¼Æbuf
«ü¦Vªº¤º¦sªÅ¶¡¡A°Ñ¼Ælen¬°¥i±µ¦¬¼Æ¾Úªº³Ì¤jªø«×¡C |
°Ñ¼Æ
|
flags¤@¯ë³]0¡C¨ä¥L¼ÆÈ©w¸q¦p¤U: MSG_OOB ±µ¦¬¥Hout-of-band °e¥Xªº¼Æ¾Ú¡C MSG_PEEK ªð¦^¨Óªº¼Æ¾Ú¨Ã¤£·|¦b¨t²Î¤º§R°£¡A¦pªG¦A½Õ¥Îrecv()·|ªð¦^¬Û¦Pªº¼Æ¾Ú¤º®e¡C MSG_WAITALL±j¢±µ¦¬¨ìlen¤j¤pªº¼Æ¾Ú«á¤~¯àªð¦^¡A°£«D¦³¿ù»~©Î«H¸¹²£¥Í¡C MSG_NOSIGNAL¦¹¾Þ§@¤£Ä@³QSIGPIPE«H¸¹¤¤Â_ªð¦^Ȧ¨¥\«hªð¦^±µ¦¬¨ìªº¦r²Å¼Æ¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs«D¦Xªkªºsocket³B²z¥N½X EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_ EAGAIN ¦¹°Ê§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsocket¬°¤£¥iªýÂ_ ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬¡C ENOMEM ®Ö¤ß¤º¦s¤£¨¬ EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
°Ñ¦Òlisten()¡C |
¡@ | |
|
recvfrom¡]¸gsocket±µ¦¬¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
recv¡Arecvmsg¡Asend¡Asendto¡Asocket |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int recvfrom(int s,void *buf,int
len,unsigned int flags ,struct sockaddr *from ,int *fromlen); |
¨ç¼Æ»¡©ú
|
recv()¥Î¨Ó±µ¦¬»·µ{¥D¾÷¸g«ü©wªºsocket ¶Ç¨Óªº¼Æ¾Ú¡A¨Ã§â¼Æ¾Ú¦s¨ì¥Ñ°Ñ¼Æbuf
«ü¦Vªº¤º¦sªÅ¶¡¡A°Ñ¼Ælen ¬°¥i±µ¦¬¼Æ¾Úªº³Ì¤jªø«×¡C°Ñ¼Æflags ¤@¯ë³]0¡A¨ä¥L¼ÆÈ©w¸q½Ð°Ñ¦Òrecv()¡C°Ñ¼Æfrom¥Î¨Ó«ü©w±ý¶Ç°eªººôµ¸¦a§}¡Aµ²ºcsockaddr
½Ð°Ñ¦Òbind()¡C°Ñ¼Æfromlen¬°sockaddrªºµ²ºcªø«×¡C |
ªð¦^È
|
¦¨¥\«hªð¦^±µ¦¬¨ìªº¦r²Å¼Æ¡A¥¢±Ñ«hªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs«D¦Xªkªºsocket³B²z¥N½X EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡¡C ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_¡C EAGAIN ¦¹°Ê§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsocket¬°¤£¥iªýÂ_¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬ ENOMEM ®Ö¤ß¤º¦s¤£¨¬ EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
/*§Q¥ÎsocketªºUDP client ¦¹µ{§Ç·|³s½uUDP server¡A¨Ã±NÁä½L¿é¤Jªº¦r²Å¦ê¶Çµ¹server¡C UDP server ½d¨Ò½Ð°Ñ¦Òsendto¡]¡^¡C */ #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/typs.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #define PORT 2345 #define SERVER_IP ¡§127.0.0.1¡¨ main() { int s,len; struct sockaddr_in addr; int addr_len =sizeof(struct sockaddr_in); char buffer[256]; /* «Ø¥ßsocket*/ if((s = socket(AF_INET,SOCK_DGRAM,0))<0){ perror(¡§socket¡¨); exit(1); } /* ¶ñ¼gsockaddr_in*/ bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); while(1){ bzero(buffer,sizeof(buffer)); /* ±q¼Ð·Ç¿é¤J³]³Æ¨ú±o¦r²Å¦ê*/ len =read(STDIN_FILENO,buffer,sizeof(buffer)); /* ±N¦r²Å¦ê¶Ç°eµ¹serverºÝ*/ sendto(s,buffer,len,0,&addr,addr_len); /* ±µ¦¬serverºÝªð¦^ªº¦r²Å¦ê*/ len = recvfrom(s,buffer,sizeof(buffer),0,&addr,&addr_len); printf(¡§receive: %s¡¨,buffer); } } |
°õ¦æ
|
(¥ý°õ¦æudp server ¦A°õ¦æudp client) hello /*±qÁä½L¿é¤J¦r²Å¦ê*/ receive: hello /*serverºÝªð¦^¨Óªº¦r²Å¦ê*/ |
¡@ | |
|
recvmsg¡]¸gsocket±µ¦¬¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
recv¡Arecvfrom¡Asend¡Asendto¡Asendmsg¡Asocket |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socktet.h> |
©w¸q¨ç¼Æ
|
int recvmsg(int s,struct msghdr
*msg,unsigned int flags); |
¨ç¼Æ»¡©ú
|
recvmsg()¥Î¨Ó±µ¦¬»·µ{¥D¾÷¸g«ü©wªºsocket¶Ç¨Óªº¼Æ¾Ú¡C°Ñ¼Æs¬°¤w«Ø¥ß¦n³s½uªºsocket¡A¦pªG§Q¥ÎUDP¨óij«h¤£»Ý¸g¹L³s½u¾Þ§@¡C°Ñ¼Æmsg«ü¦V±ý³s½uªº¼Æ¾Úµ²ºc¤º®e¡A°Ñ¼Æflags¤@¯ë³]0¡A¸Ô²Ó´yz½Ð°Ñ¦Òsend()¡CÃö©óµ²ºcmsghdrªº©w¸q½Ð°Ñ¦Òsendmsg()¡C |
ªð¦^È
|
¦¨¥\«hªð¦^±µ¦¬¨ìªº¦r²Å¼Æ¡A¥¢±Ñ«hªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs«D¦Xªkªºsocket³B²z¥N½X¡C EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_¡C EAGAIN ¦¹¾Þ§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsocket¬°¤£¥iªýÂ_¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬ ENOMEM ®Ö¤ß¤º¦s¤£¨¬ EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
°Ñ¦Òrecvfrom()¡C |
¡@ | |
|
send¡]¸gsocket¶Ç°e¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
sendto¡Asendmsg¡Arecv¡Arecvfrom¡Asocket |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int send(int s,const void * msg,int
len,unsigned int falgs); |
¨ç¼Æ»¡©ú
|
send()¥Î¨Ó±N¼Æ¾Ú¥Ñ«ü©wªºsocket ¶Çµ¹¹ï¤è¥D¾÷¡C°Ñ¼Æs¬°¤w«Ø¥ß¦n³s±µªºsocket¡C°Ñ¼Æmsg«ü¦V±ý³s½uªº¼Æ¾Ú¤º®e¡A°Ñ¼Ælen«h¬°¼Æ¾Úªø«×¡C°Ñ¼Æflags¤@¯ë³]0¡A¨ä¥L¼ÆÈ©w¸q¦p¤U MSG_OOB ¶Ç°eªº¼Æ¾Ú¥Hout-of-band °e¥X¡C MSG_DONTROUTE ¨ú®ø¸ô¥Ñªí¬d¸ß MSG_DONTWAIT ³]¸m¬°¤£¥iªýÂ_¹B§@ MSG_NOSIGNAL ¦¹°Ê§@¤£Ä@³QSIGPIPE «H¸¹¤¤Â_¡C |
ªð¦^È
|
¦¨¥\«hªð¦^¹ê»Ú¶Ç°e¥X¥hªº¦r²Å¼Æ¡A¥¢±Ñªð¦^-1¡C¿ù»~ì¦]¦s©óerrno |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs «D¦Xªkªºsocket³B²z¥N½X¡C EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_¡C EAGAIN ¦¹¾Þ§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsocket¬°¤£¥iªýÂ_¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬ ENOMEM ®Ö¤ß¤º¦s¤£¨¬ EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
°Ñ¦Òconnect() |
¡@ | |
|
sendmsg¡]¸gsocket¶Ç°e¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
send¡Asendto¡Arecv¡Arecvfrom¡Arecvmsg¡Asocket |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int sendmsg(int s,const strcut
msghdr *msg,unsigned int flags); |
¨ç¼Æ»¡©ú
|
sendmsg()¥Î¨Ó±N¼Æ¾Ú¥Ñ«ü©wªºsocket¶Çµ¹¹ï¤è¥D¾÷¡C°Ñ¼Æs¬°¤w«Ø¥ß¦n³s½uªºsocket¡A¦pªG§Q¥ÎUDP¨óij«h¤£»Ý¸g¹L³s½u¾Þ§@¡C°Ñ¼Æmsg
«ü¦V±ý³s½uªº¼Æ¾Úµ²ºc¤º®e¡A°Ñ¼Æflags¤@¯ëÀq»{¬°0¡A¸Ô²Ó´yz½Ð°Ñ¦Òsend()¡C µ²ºcmsghdr©w¸q¦p¤U struct msghdr { void *msg_name; /*Address to send to /receive from . */ socklen_t msg_namelen; /* Length of addres data */ strcut iovec * msg_iov; /* Vector of data to send/receive into */ size_t msg_iovlen; /* Number of elements in the vector */ void * msg_control; /* Ancillary dat */ size_t msg_controllen; /* Ancillary data buffer length */ int msg_flags; /* Flags on received message */ }; |
ªð¦^È
|
¦¨¥\«hªð¦^¹ê»Ú¶Ç°e¥X¥hªº¦r²Å¼Æ¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs «D¦Xªkªºsocket³B²z¥N½X¡C EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡ ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_¡C EAGAIN ¦¹¾Þ§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsocket¬°¤£¥iªýÂ_¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬ ENOMEM ®Ö¤ß¤º¦s¤£¨¬ EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
°Ñ¦Òsendto()¡C |
¡@ | |
|
sendto¡]¸gsocket¶Ç°e¼Æ¾Ú¡^ |
¬ÛÃö¨ç¼Æ
|
send , sendmsg,recv , recvfrom
, socket |
ªíÀY¤å¥ó
|
#include < sys/types.h > #include < sys/socket.h > |
©w¸q¨ç¼Æ
|
int sendto ( int s , const void
* msg, int len, unsigned int flags, const struct sockaddr * to , int tolen ) ; |
¨ç¼Æ»¡©ú
|
sendto() ¥Î¨Ó±N¼Æ¾Ú¥Ñ«ü©wªºsocket¶Çµ¹¹ï¤è¥D¾÷¡C°Ñ¼Æs¬°¤w«Ø¦n³s½uªºsocket,¦pªG§Q¥ÎUDP¨óij«h¤£»Ý¸g¹L³s½u¾Þ§@¡C°Ñ¼Æmsg«ü¦V±ý³s½uªº¼Æ¾Ú¤º®e¡A°Ñ¼Æflags
¤@¯ë³]0¡A¸Ô²Ó´yz½Ð°Ñ¦Òsend()¡C°Ñ¼Æto¥Î¨Ó«ü©w±ý¶Ç°eªººôµ¸¦a§}¡Aµ²ºcsockaddr½Ð°Ñ¦Òbind()¡C°Ñ¼Ætolen¬°sockaddrªºµ²ªGªø«×¡C |
ªð¦^È
|
¦¨¥\«hªð¦^¹ê»Ú¶Ç°e¥X¥hªº¦r²Å¼Æ¡A¥¢±Ñªð¦^¡Ð1¡A¿ù»~ì¦]¦s©óerrno
¤¤¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs«Dªkªºsocket³B²z¥N½X¡C EFAULT °Ñ¼Æ¤¤¦³¤@«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡¡C WNOTSOCK canshu s¬°¤@¤å¥ó´yzµü¡A«Dsocket¡C EINTR ³Q«H¸¹©Ò¤¤Â_¡C EAGAIN ¦¹°Ê§@·|¥O¶iµ{ªýÂ_¡A¦ý°Ñ¼Æsªºsoket¬°¸É½ÒªýÂ_ªº¡C ENOBUFS ¨t²Îªº½w½Ä¤º¦s¤£¨¬¡C EINVAL ¶Çµ¹¨t²Î½Õ¥Îªº°Ñ¼Æ¤£¥¿½T¡C |
½d¨Ò
|
#include < sys/types.h > #include < sys/socket.h > # include <netinet.in.h> #include <arpa.inet.h> #define PORT 2345 /*¨Ï¥Îªºport*/ main(){ int sockfd,len; struct sockaddr_in addr; char buffer[256]; /*«Ø¥ßsocket*/ if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){ perror (¡§socket¡¨); exit(1); } /*¶ñ¼gsockaddr_in µ²ºc*/ bzero ( &addr, sizeof(addr) ); addr.sin_family=AF_INET; addr.sin_port=htons(PORT); addr.sin_addr=hton1(INADDR_ANY) ; if (bind(sockfd, &addr, sizeof(addr))<0){ perror(¡§connect¡¨); exit(1); } while(1){ bezro(buffer,sizeof(buffer)); len = recvfrom(socket,buffer,sizeof(buffer), 0 , &addr &addr_len); /*Åã¥ÜclientºÝªººôµ¸¦a§}*/ printf(¡§receive from %s\n ¡§ , inet_ntoa( addr.sin_addr)); /*±N¦r¦êªð¦^µ¹clientºÝ*/ sendto(sockfd,buffer,len,0,&addr,addr_len);¡¨ } } |
°õ¦æ
|
½Ð°Ñ¦Òrecvfrom() |
¡@ | |
|
setprotoent¡]¥´¶}ºôµ¸¨óijªº¼Æ¾Ú¤å¥ó¡^ |
¬ÛÃö¨ç¼Æ
|
getprotobyname, getprotobynumber,
endprotoent |
ªíÀY¤å¥ó
|
#include <netdb.h> |
©w¸q¨ç¼Æ
|
void setprotoent (int stayopen); |
¨ç¼Æ»¡©ú
|
setprotoent()¥Î¨Ó¥´¶}/etc/protocols¡A
¦pªG°Ñ¼ÆstayopenȬ°1¡A«h±µ¤U¨Óªºgetprotobyname()©Îgetprotobynumber()±N¤£·|¦Û°ÊÃö³¬¦¹¤å¥ó¡C |
¡@ | |
|
setservent¡]¥´¶}¥D¾÷ºôµ¸ªA°Èªº¼Æ¾Ú¤å¥ó¡^ |
¬ÛÃö¨ç¼Æ
|
getservent, getservbyname, getservbyport,
endservent |
ªíÀY¤å¥ó
|
#include < netdb.h > |
©w¸q¨ç¼Æ
|
void setservent (int stayopen); |
¨ç¼Æ»¡©ú
|
setservent()¥Î¨Ó¥´¶}/etc/services¡A¦pªG°Ñ¼ÆstayopenȬ°1¡A«h±µ¤U¨Óªºgetservbyname()©Îgetservbyport()±N¸É¦^¦Û°ÊÃö³¬¤å¥ó¡C |
¡@ | |
|
setsockopt¡]³]¸msocketª¬ºA¡^ |
¬ÛÃö¨ç¼Æ
|
getsockopt |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int setsockopt(int s,int level,int
optname,const void * optval,,socklen_toptlen); |
¨ç¼Æ»¡©ú
|
setsockopt()¥Î¨Ó³]¸m°Ñ¼Æs©Ò«ü©wªºsocketª¬ºA¡C°Ñ¼Ælevel¥Nªí±ý³]¸mªººôµ¸¼h¡A¤@¯ë³]¦¨SOL_SOCKET¥H¦s¨úsocket¼h¡C°Ñ¼Æoptname¥Nªí±ý³]¸mªº¿ï¶µ¡A¦³¤U¦C´XºØ¼ÆÈ: SO_DEBUG ¥´¶}©ÎÃö³¬±Æ¿ù¼Ò¦¡ SO_REUSEADDR ¤¹³\¦bbind¡]¡^¹Lµ{¤¤¥»¦a¦a§}¥i«½Æ¨Ï¥Î SO_TYPE ªð¦^socket§ÎºA¡C SO_ERROR ªð¦^socket¤wµo¥Íªº¿ù»~ì¦] SO_DONTROUTE °e¥Xªº¼Æ¾Ú¥]¤£n§Q¥Î¸ô¥Ñ³]³Æ¨Ó¶Ç¿é¡C SO_BROADCAST ¨Ï¥Î¼s¼½¤è¦¡¶Ç°e SO_SNDBUF ³]¸m°e¥Xªº¼È¦s°Ï¤j¤p SO_RCVBUF ³]¸m±µ¦¬ªº¼È¦s°Ï¤j¤p SO_KEEPALIVE ©w´Á½T©w³s½u¬O§_¤w²×¤î¡C SO_OOBINLINE ·í±µ¦¬¨ìOOB ¼Æ¾Ú®É·|°¨¤W°e¦Ü¼Ð·Ç¿é¤J³]³Æ SO_LINGER ½T«O¼Æ¾Ú¦w¥þ¥B¥i¾aªº¶Ç°e¥X¥h¡C |
°Ñ¼Æ
|
optval¥Nªí±ý³]¸mªºÈ¡A°Ñ¼Æoptlen«h¬°optvalªºªø«×¡C |
ªð¦^È
|
¦¨¥\«hªð¦^0¡AY¦³¿ù»~«hªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¡C |
ªþ¥[»¡©ú
|
EBADF °Ñ¼Æs¨Ã«D¦Xªkªºsocket³B²z¥N½X ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket ENOPROTOOPT °Ñ¼Æoptname«ü©wªº¿ï¶µ¤£¥¿½T¡C EFAULT °Ñ¼Æoptval«ü°w«ü¦VµLªk¦s¨úªº¤º¦sªÅ¶¡¡C |
½d¨Ò
|
°Ñ¦Ògetsockopt()¡C |
¡@ | |
|
shutdown¡]²×¤îsocket³q«H¡^ |
¬ÛÃö¨ç¼Æ
|
socket¡Aconnect |
ªíÀY¤å¥ó
|
#include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int shutdown(int s,int how); |
¨ç¼Æ»¡©ú
|
shutdown()¥Î¨Ó²×¤î°Ñ¼Æs©Ò«ü©wªºsocket³s½u¡C°Ñ¼Æs¬O³s½u¤¤ªºsocket³B²z¥N½X¡A°Ñ¼Æhow¦³¤U¦C´XºØ±¡ªp: how=0 ²×¤îŪ¨ú¾Þ§@¡C how=1 ²×¤î¶Ç°e¾Þ§@ how=2 ²×¤îŪ¨ú¤Î¶Ç°e¾Þ§@ |
ªð¦^È
|
¦¨¥\«hªð¦^0¡A¥¢±Ñªð¦^-1¡A¿ù»~ì¦]¦s©óerrno¡C |
¿ù»~¥N½X
|
EBADF °Ñ¼Æs¤£¬O¦³®Äªºsocket³B²z¥N½X ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´yzµü¡A«Dsocket ENOTCONN °Ñ¼Æs«ü©wªºsocket¨Ã¥¼³s½u |
¡@ | |
|
socket¡]«Ø¥ß¤@Ósocket³q«H¡^ |
¬ÛÃö¨ç¼Æ
|
accept¡Abind¡Aconnect¡Alisten |
ªíÀY¤å¥ó
|
#include<sys/types.h> #include<sys/socket.h> |
©w¸q¨ç¼Æ
|
int socket(int domain,int type,int
protocol); |
¨ç¼Æ»¡©ú
|
socket()¥Î¨Ó«Ø¥ß¤@Ó·sªºsocket¡A¤]´N¬O¦V¨t²Îµù¥U¡A³qª¾¨t²Î«Ø¥ß¤@³q«HºÝ¤f¡C°Ñ¼Ædomain
«ü©w¨Ï¥Î¦óºØªº¦a§}Ãþ«¬¡A§¹¾ãªº©w¸q¦b/usr/include/bits/socket.h ¤º¡A©³¤U¬O±`¨£ªº¨óij: PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCAL UNIX ¶iµ{³q«H¨óij PF_INET?AF_INET Ipv4ºôµ¸¨óij PF_INET6/AF_INET6 Ipv6 ºôµ¸¨óij PF_IPX/AF_IPX IPX-Novell¨óij PF_NETLINK/AF_NETLINK ®Ö¤ß¥Î¤á±µ¤f¸Ë¸m PF_X25/AF_X25 ITU-T X.25/ISO-8208 ¨óij PF_AX25/AF_AX25 ·~¾lµL½uAX.25¨óij PF_ATMPVC/AF_ATMPVC ¦s¨úì©lATM PVCs PF_APPLETALK/AF_APPLETALK appletalk¡]DDP¡^¨óij PF_PACKET/AF_PACKET ªì¯Å«Ê¥]±µ¤f |
°Ñ¼Æ
|
type¦³¤U¦C´XºØ¼ÆÈ: SOCK_STREAM ´£¨ÑÂù¦V³sÄò¥B¥i«H¿àªº¼Æ¾Ú¬y¡A§YTCP¡C¤ä«ù OOB ¾÷¨î¡A¦b©Ò¦³¼Æ¾Ú¶Ç°e«e¥²¶·¨Ï¥Îconnect()¨Ó«Ø¥ß³s½uª¬ºA¡C SOCK_DGRAM ¨Ï¥Î¤£³sÄò¤£¥i«H¿àªº¼Æ¾Ú¥]³s±µ SOCK_SEQPACKET ´£¨Ñ³sÄò¥i«H¿àªº¼Æ¾Ú¥]³s±µ SOCK_RAW ´£¨Ñì©lºôµ¸¨óij¦s¨ú SOCK_RDM ´£¨Ñ¥i«H¿àªº¼Æ¾Ú¥]³s±µ SOCK_PACKET ´£¨Ñ©Mºôµ¸ÅX°Êµ{§Çª½±µ³q«H¡C protocol¥Î¨Ó«ü©wsocket©Ò¨Ï¥Îªº¶Ç¿é¨óij½s¸¹¡A³q±`¦¹°Ñ¦Ò¤£¥ÎºÞ¥¦¡A³]¬°0§Y¥i¡C |
ªð¦^È
|
¦¨¥\«hªð¦^socket³B²z¥N½X¡A¥¢±Ñªð¦^-1¡C |
¿ù»~¥N½X
|
EPROTONOSUPPORT °Ñ¼Ædomain«ü©wªºÃþ«¬¤£¤ä«ù°Ñ¼Ætype©Îprotocol«ü©wªº¨óij ENFILE ®Ö¤ß¤º¦s¤£¨¬¡AµLªk«Ø¥ß·sªºsocketµ²ºc EMFILE ¶iµ{¤å¥óªí·¸¥X¡AµLªk¦A«Ø¥ß·sªºsocket EACCESS Åv¤£¨¬¡AµLªk«Ø¥ßtype©Îprotocol«ü©wªº¨óij ENOBUFS/ENOMEM ¤º¦s¤£¨¬ EINVAL °Ñ¼Ædomain/type/protocol¤£¦Xªk |
½d¨Ò
|
°Ñ¦Òconnect()¡C |
¡@
|