我是套接字编程的新手。我编写了一个基本函数,它创建一个UDP套接字并通过它发送一个数组。我的函数创建一个套接字并在decriptor中返回0,当我使用sendto()时,它给出10038错误。
这是我的代码:
int ret, a=0;
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
exit(EXIT_FAILURE);
}
if (m_socket == INVALID_SOCKET)
{
m_socket = (AF_INET, SOCK_DGRAM,0);
}
SOCKADDR_IN addr;
char buf[256];
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
strcpy(buf,"Hallo world!");
if (m_socket != INVALID_SOCKET)
{
ret=sendto(m_socket,buf,strlen(buf),0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
if(ret==SOCKET_ERROR)
{
printf("Fehler: sendto, fehler code: %d\n",WSAGetLastError());
a=WSAGetLastError();
ret=-1;
}
CloseSocket();
WSACleanup();
m_socket = INVALID_SOCKET;
}
答案 0 :(得分:1)
您的代码有:
m_socket = (AF_INET, SOCK_DGRAM,0);
用于初始化m_socket
。这将0
分配给m_socket
不从操作系统分配套接字。因此,您会收到此非套接字错误。
您可以使用:
m_socket = socket(AF_INET, SOCK_DGRAM,0);
掩盖错字。