x64平台下,select函数老返回错误码10038的问题!

时间:2021-03-16 08:44:05
最近需要把一个项目一直到64位机器上,因为历史原因,结构体都是采用1字节对齐.
32位程序没问题,但是到64位机器上,就老返回10038错误;
如果改成采用结构体默认(8字节)对齐方式,select正常;

我尝试自定义一个fd_set的结构体,加上保留字段,使得1字节和8字节的大小一致,依然不能解决问题,求高手指点,不胜感激!
typedef struct my_fd_set {
unsigned int fd_count; /* how many are SET? */
unsigned int reserved;          /* reserved */
SOCKET  fd_array[FD_SETSIZE];   /* an array of SOCKETs */
} my_fd_set;

5 个解决方案

#1


getlasterror显示10038 意思是在一个非套接字上尝试了一个操作 

是不是对齐造成的参数不对

#2


又是64位,win32 out了

#3


何不在64位机器上编译下,使用64的内核文件

#4


不用select

#5


自己研究测试了下,发现把
#include <winsock2.h>
改成
#pragma pack(8)
#include <winsock2.h>
#pragma pack()
就一定能成功!不知道会不会影响到其他的功能!!目前先这样解决!

#1


getlasterror显示10038 意思是在一个非套接字上尝试了一个操作 

是不是对齐造成的参数不对

#2


又是64位,win32 out了

#3


何不在64位机器上编译下,使用64的内核文件

#4


不用select

#5


自己研究测试了下,发现把
#include <winsock2.h>
改成
#pragma pack(8)
#include <winsock2.h>
#pragma pack()
就一定能成功!不知道会不会影响到其他的功能!!目前先这样解决!