C ++ 64bit - 尝试对不是SOCKET的对象进行操作

时间:2014-05-29 19:11:13

标签: c++ sockets visual-studio-2008 64-bit

我是套接字编程的新手,我试图使用套接字编程ping一台机器。我的代码编译为64位平台。

以下是我正在使用的代码:

SOCKET    rawSocket;
struct    sockaddr_in saDest;
struct timeval Timeout;
fd_set readfds;
struct addrinfo *result = NULL;
struct addrinfo hints;
DWORD  dwRetVal;

rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET;

dwRetVal = getaddrinfo(pstrHost, NULL, &hints, &result);

saDest.sin_addr.s_addr = ((struct sockaddr_in *)(result->ai_addr))->sin_addr.s_addr;
saDest.sin_family = AF_INET;
saDest.sin_port = 0;

FD_ZERO(&readfds);
FD_SET(rawSocket, &readfds);

Timeout.tv_sec = 5;
Timeout.tv_usec = 0;

select(1, &readfds, NULL, NULL, &Timeout);

一旦我执行select调用它就会返回错误:"尝试对非套接字"进行操作。错误代码select() error: 10038

关于可能出错的任何想法?

UPDATE 1:我刚刚拨打connect之前尝试select

dwRetValue = connect(rawSocket, (SOCKADDR *) & saDest, sizeof(saDest));

并且此调用返回0.

0 个答案:

没有答案