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

本文详细介绍了C语言中用于网络编程的listen()和bind()函数。listen()函数用于设置socket为监听模式,指定最大连接请求队列长度。bind()函数则是为socket分配一个名称,通常在socket()和listen()之后调用,用于指定socket的IP地址和端口号。这两个函数是TCP/IP通信中建立连接的重要步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言listen()函数:等待连接头文件:

#include

定义函数:

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 #include

定义函数: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, 失败返回-1, 错误原因存于errno 中.

错误代码:

1、EBADF 参数sockfd 非合法socket 处理代码.

2、EACCESS 权限不足

3、ENOTSOCK 参数sockfd 为一文件描述词, 非socket.

文章标题: C语言中等待socket连接和对socket定位的方法

文章地址: http://www.szneuvisiontec.com/ruanjian/101908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值