欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

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

时间:2021-02-06 10:07:03|栏目:C代码|点击:

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

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

上一篇:VC++实现选择排序算法简单示例

栏    目:C代码

下一篇:C++生成随机数的实现代码

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

本文地址:http://www.codeinn.net/misctech/58250.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有