非常に単純な C プログラムを作成しようとしています。何らかの理由で、writeFileEx を呼び出すたびに recvfrom がクラッシュするため、同じプログラム内で writeFileEx と recvfrom を使用することはできません。
関連するコードスニペットは次のとおりです
struct sockaddr_in server, client_address;
int client_length, recv_len;
char buf[BUFLEN];
WSADATA wsa;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0 )
{
//Error
}
SOCKET s = socket (AF_INET, SOCK_DGRAM, 0);
if (s == INVALID_SOCKET)
{
//invalid socket error
}
server.sin_family = AF_INET;
server.sin_addr.s_addr= INADDR_ANY;
server.sin_port = htons (PORT);
if (bind(s, (stuct sockaddr* ) &server, sizeof(server)) == SOCKET_ERROR)
{
//bind error
}
OVERLAPPED ovWrite;
memset(&ovWrite,0,sizeof(ovWrite));
ovWrite.offset=0;
ovWrite.OffsetHigh=0;
ovWrite.hEvent = CreateEvent (0,TRUE,0,0);
memset(buf,'\0',BUFLEN);
while (1)
{
if (!recvfrom(s, buf, BUFLEN,0,(struct sockaddr *) &client_address, &client_length)
{
fprintf(stderr, "Recvfrom Failed %d\n", WSAGetlastError());
}
if (!WriteFileEx(serialHandle, buf, strlen(buf),&ovWrite,NULL))
{
fprintf(stderr, "Error writing to COM port %d\n", GetlastError());
}
memset(buf,'\0', BUFLEN);
}
lcc コンパイラを使用していますが、結果のプログラムがループの 2 回目の反復でアクセス違反 0xc0000005 でクラッシュします。recvfrom を stdin などの別の入力ソースに置き換えると、プログラムは正常に動作します。これは既知の問題ですか、それとも 2 つの関数呼び出しが一緒に存在することはできませんか?