Я пытаюсь написать очень простую программу на C. По какой-то причине я не могу использовать writeFileEx и recvfrom в той же программе, что и каждый вызов writeFileEx заставляет recvfrom сбой.Windows 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 компилятор, и в результате программа падает на второй итерации цикла с нарушением прав доступа 0xc0000005. Когда я заменяю recvfrom другим источником ввода, таким как stdin, программа работает нормально. Это известная проблема или два вызова функций просто не могут существовать вместе?
«Это известная проблема или два вызова функций просто не могут существовать вместе?» - нет. У вашего кода есть ошибки. –
Почему адрес процедуры завершения NULL? –
Я сделал это как можно более минималистским, чтобы устранить любые ошибки, но все равно сбой. Можете ли вы определить ошибку в приведенном выше фрагменте? – user2667394