int sock, connected, bytes_received, true = 1;
struct sockaddr_in server_addr, client_addr;
int sin_size;
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket");
exit(1);
}
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &true, sizeof (int)) == -1) {
perror("Setsockopt");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[1]));
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero), 8);
if (bind(sock, (struct sockaddr *) &server_addr, sizeof (struct sockaddr))
== -1) {
perror("Unable to bind");
exit(1);
}
if (listen(sock, 5) == -1) {
perror("Listen");
exit(1);
}
printf("\nTCPServer Waiting for client on port 5003");
fflush(stdout);
while (1)
{
pthread_t *child = (pthread_t *)malloc(sizeof(pthread_t));
sin_size = sizeof (struct sockaddr_in);
connected = accept(sock, (struct sockaddr *) &client_addr, &sin_size);
printf("\n I got a connection from (%s , %d)\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
pthread_create(child, NULL, interpretMessage, NULL);
free(child);
}
내 TCP 서버는 포트 5003에서 수신 대기합니다. 연결이 생성되면 thread를 생성하고 interpreterMessage 함수를 실행하려고합니다. 이 문제에 대해 몇 가지 질문이 있습니다 ...멀티 스레드 TCP 서버 C
1) 정확한 위치에서 malloc을 무료로 호출하고 있습니까?
2) pthread_create가 호출 된 후 내 코드가 즉시 "무료 (하위)로 점프합니까?" while 루프의 시작 부분으로 돌아 간다. 5 사람들이 코드 실행이 5 개 스레드를 생성하는 않는 방법 같은 정확한 시간 (에 연결하는 경우
3) 어떻게됩니까?)
안녕하십니까. 답장을 보내 주셔서 감사합니다. interpretMessage 함수에 구조체를 전달 했으므로 구문 분석기의 내용과 다른 사람을 혼동하지 않으므로 단순성을 위해 인수를 제거했습니다. 지금해야 할 일이 무엇인지 이해합니다. 정말 고마워요! – Eddie