#include <pthread.h>
#include "TCPEchoServer.h" /* TCP echo server includes */
/* for POSIX threads */
void *ThreadMain (void *arg); /* Main program of a thread */
/* Structure of arguments to pass to client thread */
struct ThreadArgs
{
int clntSock; /* Socket descriptor for client */
};
int
main (int argc, char *argv<>)
{
int servSock; /* Socket descriptor for server */
int clntSock; /* Socket descriptor for client */
unsigned short echoServPort; /* Server port */
pthread_t threadID; /* Thread ID from pthread_create() */
struct ThreadArgs *threadArgs; /* Pointer to argument structure for thread */
if (argc != 2) /* Test for correct number of arguments */
{
fprintf (stderr, "Usage: %s <SERVER PORT>", argv[0]);
exit (1);
}
echoServPort = atoi (argv[1]); /* First arg: local port */
servSock = CreateTCPServerSocket (echoServPort);
for (;;) /* run forever */
{
clntSock = AcceptTCPConnection (servSock);
/* Create separate memory for client argument */
if ((threadArgs =
(struct ThreadArgs *)
malloc (sizeof (struct ThreadArgs))) == NULL)
DieWithError ("malloc() failed");
threadArgs->clntSock = clntSock;
/* Create client thread */
if (pthread_create(&threadID, NULL, ThreadMain, (void *) threadArgs) != 0)
DieWithError ("pthread_create() failed");
printf ("with thread %ld", (long int) threadID);
}
/* NOT REACHED */
}
void *
ThreadMain (void *threadArgs)
{
int clntSock; /* Socket descriptor for client connection */
/* Guarantees that thread resources are deallocated upon return */
pthread_detach (pthread_self ());
/* Extract socket file descriptor from argument */
clntSock = ((struct ThreadArgs *) threadArgs)->clntSock;
free (threadArgs); /* Deallocate memory for argument */
HandleTCPClient (clntSock);
return (NULL);
}
프로그램 루틴은 대충 이렇습니다.
안되는건 위에 보면 pthread_create와 pthread_detach함수를사용하는데
분명히 #include <pthread.h>를 명시해주었음에도 불구하고
컴파일과정에서
undefine reference to 'pthread_create'
undefine reference to 'pthread_detach'
가 뜹니다. 이게어떻게된영문인지..
이프로그램은 책에 있는 예제인데 echoserver로 요청이 오면 쓰레드를 생성하여
응답합니다 위에 AcceptTCPconnection()과 CreateTCPServerSocket()
과 HandleTCPclient()는 TCPEchoserver.h에서 불러들이는파일에
다 만들어져있으며 질문과는 관계가 없는걸로 생각되어 소스를 올리지 않았습니다. 답이
아니라도좋습니다. 생각나시는것있으면 자그마한글이라도^^--ps:즐거운 하루되세요