C语言中等待socket连接和对socket定位的方法
C语言listen()函数:等待连接 #include <sys/socket.h> 定义函数: int listen(int s,int backlog); 函数说明:listen()用来等待参数s 的socket 连线. 参数backlog 指定同时能处理的最大连接要求,如果连接数目达此上限则client 端将收到ECONNREFUSED 的错误. Listen()并未开始接收连线,只是设置socket 为listen 模式,真正接收client 端连线的是accept(). 通常listen()会在socket(),bind()之后调用,接着才调用accept(). 返回值:成功则返回0,失败返回-1,错误原因存于errno 附加说明:listen()只适用SOCK_STREAM 或SOCK_SEQPACKET 的socket 类型. 如果socket 为AF_INET 则参数backlog 最大值可设至128. 错误代码: C语言bind()函数:对socket定位 #include <sys/types.h> #include <sys/socket.h> 定义函数:int bind(int sockfd,struct sockaddr * my_addr,int addrlen); 函数说明:bind()用来设置给参数sockfd 的socket 一个名称. 此名称由参数my_addr 指向一sockaddr 结构,对于不同的socket domain 定义了一个通用的数据结构 struct sockaddr { unsigned short int sa_family; char sa_data[14]; }; 1、sa_family 为调用socket()时的domain 参数,即AF_xxxx 值. 此sockaddr 结构会因使用不同的socket domain 而有不同结构定义,例如使用AF_INET domain,其socketaddr 结构定义便为 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; }; 1、sin_family 即为sa_family 返回值:成功则返回0,错误原因存于errno 中. 错误代码: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |