Редактировать: Оказалось, проблема с моим встроенным адаптером Ethernet.Работает хорошо сейчас.Спасибо всем.
Когда я отправляю файл через TCP-сокет, для завершения передачи требуется много времени (~ 4 секунды для 1,5 Мбайт).Тот же файл перемещается почти мгновенно по TFTP.Я знаю, что tftp использует UDP, который должен быть быстрее, но я все еще думаю, что мой способ передачи слишком медленный.Я подключен 100 Мбит / с полудуплекс, через кроссовер кабель.Отправитель - UNIX, а получатель - .Net в Windows TcpClient.
Итак, что все думают?Нужен ли мне лучший код на C?Может быть, что-то не так с сетью?
Вот мой код C:
int main(void)
{
//some initializing stuff
int AcceptSocket, ClientRecvSocket;
alen = sizeof(fsin);
int AcceptSocket = passiveTCP("20075", 10);
//Wait for client connections, and spawn a new thread to communicate with each one
pszRecvBuf = malloc((size_t) BUFSIZE);
while (1)
{
ClientRecvSocket = accept(AcceptSocket, &fsin, &alen);
printf("\nDebug: Accepted Connection\n");
if (ClientRecvSocket < 0)
{
sprintf(szStr, "Error accepting client connection : %d",
ClientRecvSocket);
perror(szStr);
}
else
{
printf("\nDebug: Starting Thread\n");
ThreadStatus = pthread_create(&ClientThread, NULL, ClientRecv,
(void *) &ClientRecvSocket);
pthread_join(ClientThread, NULL);
}
}
}
void *ClientRecv(void *ClientSocket)
{
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
int Socket = *(int *) ClientSocket;
unsigned char *file_buffer;
file_buffer = malloc(1572864 * sizeof(unsigned char));
//set file data to something
SendLen = send(Socket, file_buffer, 1572864 * sizeof(unsigned char), 0);
shutdown(Socket, SHUT_RDWR);
free(file_buffer);
}
int passiveTCP(char *service, int qlen)
{
return passivesock(service, "tcp", qlen);
}