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()
就一定能成功!不知道会不会影响到其他的功能!!目前先这样解决!
#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()
就一定能成功!不知道会不会影响到其他的功能!!目前先这样解决!
#include <winsock2.h>
改成
#pragma pack(8)
#include <winsock2.h>
#pragma pack()
就一定能成功!不知道会不会影响到其他的功能!!目前先这样解决!