¡@



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½u­n¨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¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡A«Dsocket¡C
EISCONN °Ñ¼Æsockfdªºsocket¤w¬O³s½uª¬ºA
ECONNREFUSED ³s½u­n¨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¡A­Y¦³¿ù»~«hªð¦^-1¡A¿ù»~­ì¦]¦s©óerrno
¿ù»~¥N½X
EBADF °Ñ¼Æs ¨Ã«D¦Xªkªºsocket³B²z¥N½X
ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡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¸Ô²Ó´y­z½Ð°Ñ¦Ò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¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡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¸Ô²Ó´y­z½Ð°Ñ¦Ò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¬°¤@¤å¥ó´y­zµü¡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¸Ô²Ó´y­z½Ð°Ñ¦Ò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¬°¤@¤å¥ó´y­zµü¡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¡A­Y¦³¿ù»~«hªð¦^-1¡A¿ù»~­ì¦]¦s©óerrno¡C
ªþ¥[»¡©ú
EBADF °Ñ¼Æs¨Ã«D¦Xªkªºsocket³B²z¥N½X
ENOTSOCK °Ñ¼Æs¬°¤@¤å¥ó´y­zµü¡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¬°¤@¤å¥ó´y­zµü¡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
¡@