Date: Mon, 02 Oct 2000 00:17:11 +0200 (IST) From: Roman Shterenzon <roman@harmonic.co.il> To: freebsd-stable@freebsd.org Subject: Pthreads saga continues.. Message-ID: <970438631.39d7b7e76d963@webmail.harmonic.co.il>
index | next in thread | raw e-mail
[-- Attachment #1 --]
Good day,
Isn't the main thread should break out of accept when it receives signal from
the other thread?
Am I missing something?
--Roman Shterenzon, UNIX System Administrator and Consultant
[ Xpert UNIX Systems Ltd., Herzlia, Israel. Tel: +972-9-9522361 ]
[-- Attachment #2 --]
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#include <errno.h>
int sock;
int cmd=0;
pthread_t main_tid;
void* routine(void *arg)
{
pthread_t my_tid;
/* while(1); */
sleep(5);
my_tid=pthread_self();
printf("%ld: Sending %ld signal\n", my_tid, main_tid);
pthread_kill(main_tid, SIGUSR1);
printf("%ld: Sent %ld signal\n", my_tid, main_tid);
}
void usr1handler(int sig)
{
int rc=-2;
printf("Closing socket: %d\n", sock);
rc=close(sock);
printf("Closed socket, rc: %d\n", rc);
}
int main(void)
{
pthread_t tid;
int newfd, sin_size, on=1;
struct sockaddr_in myaddr, hisaddr;
/*signal(SIGUSR1, usr1handler);*/
pthread_create(&tid, NULL, routine, NULL);
main_tid=pthread_self();
if ( (sock=socket(PF_INET, SOCK_STREAM, 6))==-1) {
perror(socket);
pthread_kill(tid, SIGTERM);
exit(-1);
}
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
myaddr.sin_family=PF_INET;
myaddr.sin_port=htons(1111);
myaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(myaddr.sin_zero), 8);
if ((bind(sock, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)))==-1) {
perror(bind);
pthread_kill(tid, SIGTERM);
exit(-1);
}
if (listen(sock, 2) == -1 ) {
perror("listen");
pthread_kill(tid, SIGTERM);
exit(-1);
}
while(1) {
if (( newfd=accept(sock, (struct sockaddr *)&hisaddr, &sin_size))==-1){
if ( errno==EINTR ) {
printf("Got a signal\n");
if ( cmd ) {
printf("It was a sign!\n");
break;
}
}
perror("accept");
exit(-1);
}
printf("connection accepted\n");
close(newfd);
}
pthread_kill(tid, SIGTERM);
return 0;
}
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?970438631.39d7b7e76d963>
