在linux上接受时使用相同的SOCKET id
Same SOCKET id when accept on linux?
我写了LD_PRELOAD,它拦截accept()函数。我遇到了一个问题,因为有时accept函数会给我相同的文件描述符。我只为一个进程加载此预加载
我的代码:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
int fd;
fd = (*realAccept)(sockfd, addr, addrlen);
if(fd >= 0)
{
printf("file descriptor: %dn", fd);
...
return fd;
}
}
int close(int fd)
{
printf("close decriptor: %dn", fd);
return (*realClose)(fd);
}
输出为:
文件描述符:213
文件描述符:213<--为什么?
关闭描述符:213
为什么accept函数返回相同的文件描述符?
谢谢!
我敢打赌这是由于stdout
的缓冲造成的错误。也许还有其他线程在使用它……再加上没有包含结束n
,可能会导致输出中出现重复的行。
如果要确定,请在字符串末尾添加n
,并在每次调用printf()
之后添加fflush(stdout)
。
相关文章:
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 断言"id < 0"在Qt ActiveX中失败
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 如何根据两个因素组织向量:id 和数量?(C++)
- 在返回 0 之前应为非限定 ID
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 在linux上接受时使用相同的SOCKET id