LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1363|回复: 2

关于socket库里的accept函数

[复制链接]
发表于 2008-4-20 23:24:54 | 显示全部楼层 |阅读模式
accept的函数原形是:

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

其中sockfd是一个已打开的用作监听的文件描述符

但执行accept之后sockfd的值会改变!所以之后循环执行accept,再次想从监听队列里提取请求的话,函数就会出错,提示说给了一个错误的文件描述符,请问这是怎么一回事??为什么它要改变sockfd的值??我想其实它不应该改变这个值啊~~
发表于 2008-4-21 01:04:19 | 显示全部楼层
sockfd 怎么可能会变化呢?C 语言的特性保证了函数的参数是不可能被函数内部改变的,对吧。

所以,应该是你程序的处理过程中出错了。
回复 支持 反对

使用道具 举报

发表于 2008-4-21 10:10:54 | 显示全部楼层
楼主不会是执行了
  1. fd = accept(fd, addr, addrlen);
复制代码
这样的代码吧....

如果是这样的话, 请仔细阅读 man 2 accept, 理解一下 accept 的返回值究竟应该如何使用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表