Меняется первая вещь, которую я буду делать:
char hostname[15];
до:
char hostname[16];
Возможно, вы переполняете буфер, что может привести к повреждению стека. Для полного адреса IPv4 требуется 16 символов: nnn.nnn.nnn.nnn
плюс завершающий \0
. В действительности вам, вероятно, не следует использовать эти вызовы, если вы меньше всего заинтересованы в работе с IPv6 - я уверен, что они не очень хорошо работают в этом мире. Но это другая проблема.
Другая проблема , с которой вы столкнулись (и это почти наверняка является причиной вашего сбоя), заключается в следующем:
char *buffer;
:
read(sockfd, buffer, MY_BUFFER_SIZE);
без фактического выделения памяти для этого буфера, так что buffer
будет указывать на произвольное местоположение. Либо использовать:
char buffer[MY_BUFFER_SIZE];
или
char *buffer = malloc (MY_BUFFER_SIZE);
не забудьте проверить наличие ошибок выделения и освободить его, когда он больше не требуется.