03-11-2008
Use AIO or Thread Pool
Multiple threads can definately listen to single socket. All threads can be blocked on "select" or "poll" system-call. Now depending on number of CPU your that many number of threads will come out of select/poll system call then if its TCP you mandatory call "accept" system-call. Here only 1 thread will succeed and remaining threads will fails which again go back to select/poll system-call. Now if instead of TCP you using UDP then same above syncronization will happen at "read" system-call and remaining threads has to go back at select/poll. Pseudo code will look like
while(1) {
select(sockfd);
rs = accept(sockfd);
if(rs == -1) continue;
thread_function();
}
But from past-experience. I'd recommend you to re-design of your software with producer and worker concept. One thread will read data on socket then it will select a thread from pool and assign work to that.
From our statistics I'd say 1GHz CPU can efficiently hangle 25 complex threads only!!! And for multithreads instead of deploying higher capacity of CPU you should go for higher multi-core procerrors only!!!
10 More Discussions You Might Find Interesting
1. Programming
Hi,
I want to validate that a file is a socket file on Linux. I know I can do this using the S_ISSOCK macro, but I am not sure how to get the file descriptor for the socket file.
For example, I know that /tmp/mapping-foo is a socket file. In Python I can do something like this:
>>> import... (2 Replies)
Discussion started by: goon12
2 Replies
2. Programming
I have set the receive buffer size of socket to max.
setsockopt(sd,SOL_SOCKET, SO_RCVBUF,&max,optval);
Am reading data from the socket in a loop(say max 100 bytes per recv)
while(1)
{
int rlen=recv(sd,(void *)buf, 100 , 0);
//err handle and processing
}
Assume my process is slow... (2 Replies)
Discussion started by: johnbach
2 Replies
3. Solaris
Hi All
I have a separate thread ListenerThread having a socket listening to info broadcasted by some remote server. This is created in my main thread.
Because of requirements, once the separate thread is started I need to avoid any blocking function on the main thread. Once it comes to the... (2 Replies)
Discussion started by: manustone
2 Replies
4. Solaris
I have a query related to the functioning of poll() system call on solaris and linux platforms.
When the client is abnormally terminated, it is observed that on Linux the socket is immediately closed and the server gets ECONNREFUSED.
But in case of Solaris it is observed that the socket is not... (0 Replies)
Discussion started by: Amarjeet_7
0 Replies
5. Programming
char name;
printf ("Welcome to the server \n");
printf ("Enter user name: \n");
scanf ("%c", &name);
how can client send name to server:what should be the code?
int send ( int sid , const char ∗buffer Ptr , int len , int f l a g )
how can client receive ack from... (1 Reply)
Discussion started by: saiful_911
1 Replies
6. Programming
How to know whether socket is ready for write.
select(maxfds, (fd_set *)NULL, &writefds, NULL, &timeout);
By default socket is set for write without checking whether it would block or not? If so how do I know my FD is ready for writing. (3 Replies)
Discussion started by: satish@123
3 Replies
7. Programming
Hi all,
Can I create multiple threads using single thread_id
like
pthread_t thread_id;
pthread_create(&thread_id, NULL, &print_xs, NULL);
pthread_create(&thread_id, NULL, &print_ys, NULL);
pthread_create(&thread_id, NULL, &print_zs, NULL);
pthread_join(thread_id, NULL);
what... (2 Replies)
Discussion started by: zing_foru
2 Replies
8. IP Networking
Hello to all,
I have below function, but the thread will be bloked at the line
delete pListenSocket; // Close and delete
If I put some cpu timing switching function prior to it, then no blocking pop up.
printf("xyz\n"); // or sleep(100);
delete pListenSocket; // Close and... (1 Reply)
Discussion started by: shinypro
1 Replies
9. Solaris
I have BIND 9.8.1-P1 cache only DNS server running in Solaris 10. I have upgraded the same from 9.6.1 to 9.8.1-P1. Now i am facing "file descriptor exceeds limit (4096/4096)" error frequently on the server.
Please help me on this issue! (1 Reply)
Discussion started by: sandeep.tk
1 Replies
10. Shell Programming and Scripting
Hi,
Input
7488 7389 chr1.fa chr1.fa
3546 9887 chr5.fa chr9.fa
7387 7898 chrX.fa chr3.fa
7488 7389 chr21.fa chr3.fa
7488 7389 chr1.fa chr1.fa
3546 9887 chr9.fa chr5.fa
7898 7387 chrX.fa chr3.fa
Desired Output
7488 7389 chr1.fa chr1.fa 2
3546 9887 chr5.fa chr9.fa 2... (2 Replies)
Discussion started by: jacobs.smith
2 Replies
LEARN ABOUT HPUX
sockatmark
sockatmark(3N) sockatmark(3N)
NAME
sockatmark() - determine whether a socket is at the out-of-band mark
SYNOPSIS
DESCRIPTION
The function determines whether the socket specified by the descriptor is at the out-of-band data mark.
If the protocol for the socket supports out-of-band data by marking the stream with an out-of-band mark, the function returns 1 when all
data preceding the mark has been read and the out-of-band mark is the first element in the receive queue. The function does not remove the
mark from the stream.
X/Open Sockets Only
is new in
RETURN VALUES
Upon successful completion, the function returns a value indicating whether the socket is at an out-of-band data mark:
If the protocol has marked the data stream and all data preceding the mark has
been read.
If there is no mark, or if data
precedes the mark in the receive queue.
On failure, returns and sets to indicate the error.
ERRORS
If fails, is set to one of the following values:
The argument is not a valid file descriptor.
The argument does not specify a descriptor for a socket.
APPLICATION USAGE
The use of this function between receive operations allows an application to determine which received data precedes the out-of-band data
and which follows the out-of-band data.
There is an inherent race condition in the use of this function. On an empty receive queue, the current read of the location might be at
the "mark". However, the system has no way of knowing that the next data segment arriving from the network is carrying the mark. Then
returns false, and the next read operation silently consumes the mark.
Hence, this function can only be used reliably in one or both ways:
o when the application already knows that the out-of-band data has been seen by the system
o and that it knows data is waiting to be read at the socket (by using or
AUTHOR
was developed by HP and IEEE.
SEE ALSO
ioctl(2), pselect(2), recv(2), recvmsg(2), socket(7).
STANDARDS CONFORMANCE
sockatmark(3N)