我是串行端口编程和套接字的新手,所以请温柔:)
我在 Windows 7 上使用 Visual Studio 2010。我正在尝试从串行端口接收数据包(插入了一个与远程设备连接的 USB Digi XStick)。我首先使用 WriteFile 发送初始数据包,此操作成功完成。当我调用 select 时,我得到错误 10038“尝试对不是套接字的东西进行操作”。
以下是相关代码:
char szCodedPort[20];
sprintf(szCodedPort, "\\\\.\\COM%d",3); //manually set for testing purposes
HANDLE fileHandle = CreateFileA(szCodedPort,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
fd_set readfds;
int fd;
fd = _open_osfhandle((long)fileHandle, O_RDONLY);
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
WSAData WSA_Data;
WSAStartup(MAKEWORD(2,2),&WSA_Data);
res = select(fd,&readfds,NULL,NULL, &waitlen);
WSACleanup();
我认为我的问题出在 fd 上,但我不确定如何解决。我可以使用什么传递给代表串行端口的 FD_SET,以便 select 在使用 readfds 时停止生成错误消息?或者我什至没有使用这个正确的邮政编码?