C语言中等待socket连接和对socket定位的方法

C语言中等待socket连接和对socket定位的方法,第1张

概述C语言listen()函数:等待连接头文件:#include<sys/socket.h>定义函数:intlisten(ints,intbacklog);

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.

错误代码:
   EBADF 参数sockfd 非合法socket 处理代码
   EACCESS 权限不足
   EOPNOTSUPP 指定的socket 并未支援Listen 模式.

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 值.
2、sa_data 最多使用14 个字符长度.

此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
2、sin_port 为使用的port 编号
3、sin_addr. s_addr 为IP 地址 sin_zero 未使用.
参数 addrlen 为sockaddr 的结构长度.

返回值:成功则返回0,错误原因存于errno 中.

错误代码:
1、EBADF 参数sockfd 非合法socket 处理代码.
2、EACCESS 权限不足
3、ENOTSOCK 参数sockfd 为一文件描述词,非socket.

总结

以上是内存溢出为你收集整理的C语言中等待socket连接和对socket定位的方法全部内容,希望文章能够帮你解决C语言中等待socket连接和对socket定位的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1252669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存