calling a shared object from a daemon


 
Thread Tools Search this Thread
Top Forums Programming calling a shared object from a daemon
# 1  
Old 10-01-2006
calling a shared object from a daemon

Hi

I have a multithreaded daemon(server) which will accept connections from various clients and sends back results to them.

In order to serve my daemon clients, it has to establish a TCP connection to another server(vendor supplied which is listening on a specific TCP port) and gets the results and gives them back to its(my daemon) clients.

Its something like 3-tier architechure.
clients <-----> client/server<---->server

I have some doubts regarding the above situation:

1) Can I establish a TCP connection from a thread in my daemon process so that it should not get the error "address already in use" for the subsequent threads.

2) Can I use a shared object to establish a TCP connection b/w my daemon and vendor supplied server?

Any suggestions pls...
axes
# 2  
Old 10-02-2006
Change the port address

If i got ur problem correctly, u want to create a separate TCP connection with vendor's server for each of ur daemon's client.
This can be done very well by changing the port no. for each connection.

That is, if for 1st thread u connected using port no. 6001, then in the 2nd thread use port no. 6002 and so on....
# 3  
Old 10-02-2006
First of all Thanks hemant

I will try to make it more clear.

I have only one connection (say port 7575) b/w my daemon clients(threads) and vendor server.

How can I share this connection among my daemon clients i.e. various threads.
axes
# 4  
Old 10-02-2006
What do you mean by 'share'?

If they have to act like seperate connections, it won't work.

If they can all just use the same connection, you could protect it with mutexes, but this would be vulnerable to deadlocks.

It would be better to have one thread handling the socket, communicating with the other threads by other means.
# 5  
Old 10-04-2006
Thanks corona
I have one thread handling the signals BUT how can I have a thread handling the socket, Could you please give me the pseudo code or some more detail for the following case:

"It would be better to have one thread handling the socket, communicating with the other threads by other means."

Thanks in advance
axes
# 6  
Old 10-04-2006
Socket read thread:

Read message
Dispatch message to thread

Socket write thread:

Read message from thread
Write message to socket

Client thread:

Read message from network thread
Do something
Dispatch message to network thread
# 7  
Old 10-05-2006
Thanks corona 4 ur suggestions. I am little bit confused abt thread creation.

For ur reference I am pasting my daemon template code. Pls embed the new code to establish a TCP connection to vendor server so that I can simulate the same.

Sorry to bother abt my code.
Code:
#define _REENTRANT
----- HEADER FILES -----------
/* the TCP port that I will be listening for my clients*/
#define TCP_PORT   6500
void *process_clnt(void *);
main()
{
   int 	sockfd, newsockfd, clilen;
   struct sockaddr_in cli_addr, serv_addr;
   thread_t chld_thr;

   if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	fprintf(stderr,"my_daemon: can't open stream socket\n"), exit(0);
   memset((char *) &serv_addr, 0, sizeof(serv_addr));
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
   serv_addr.sin_port = htons(TCP_PORT);	
   if(bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
		fprintf(stderr,"server: can't bind local address\n"), exit(0);
   thr_setconcurrency(5);
   listen(sockfd, NULL);

   for(;;){
	clilen = sizeof(cli_addr);
	newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
	if(newsockfd < 0)
		fprintf(stderr,"server: accept error\n"), exit(0);
	/* create a new thread to process the incomming client request */
	thr_create(NULL, 0, process_clnt, (void *) newsockfd, THR_DETACHED, &chld_thr);
   }
   return(0);
}

void *process_clnt(void *arg)
{
   int 	mysocfd = (int) arg;
   char 	data[100];
   /* read from the given socket */
   read(mysocfd, data, data_size);
   /* DO SOME PROCESSING */

   /* This is the place I want to have a TCP connection to vendor server to get the result */
       ----------------------
       ----------------------
   write(mysockfd,result,result_size); /* send back result to my client */
   close(mysocfd);
   thr_exit((void *)0);
}


Last edited by blowtorch; 10-05-2006 at 02:53 PM.. Reason: add code tags
axes
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Help building and using a shared object (x64)

Hello, I am not that experienced with Linux, and I am currently facing some issues. The application I'm working on uses hundreds of threads. To optimize the memory usage, I am putting all my data inside a shared object (so). The steps for this are as follows: 1. a C file (generated... (17 Replies)
Discussion started by: Maelstrom
17 Replies

2. Programming

Shared Object Question

Hello, I am new to programming shared objects and I was hoping someone could tell me if what I want to do is possible, or else lead me in the right direction. I have a main program that contains an abstract base class. I also have a subclass that I'm compiling as a shared object. The subclass... (13 Replies)
Discussion started by: dorik
13 Replies

3. Red Hat

shared object

Hi, I would like to create a shared object ( .so). This shared object 1. uses the functions from a library. 2. Also it should be able to use the global variable in an app To achieve this what should I do ? 1) To use the functions in the library should I give the -ld option while... (1 Reply)
Discussion started by: rvan
1 Replies

4. Programming

Error while running shared object

Hello, While running a c++ shared object on AIX I am facing below error - rtld: 0712-001 Symbol __ct__3ETDFv was referenced from module /bancs/aml/lib/libmonitor.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol etd_insert__3ETDFv was... (3 Replies)
Discussion started by: yatrik007
3 Replies

5. AIX

AIX 5.2 C++ shared object issue

Hi all, I am developing an application with two components. One "c" binary and one "C++" shared object. While execution, the shared object crashes out and core dump is created whenever "new" is executed. But if i use malloc this will work perfectly. I tried to use dbx. Below given was... (1 Reply)
Discussion started by: itssujith
1 Replies

6. Shell Programming and Scripting

Any way to access shared object using shell

Hi, I have created a shared object (abc.so) which has a function sum(int a, int b). Is there any way to load the "abc.so" and use the sum function using shell script.. thanks in advance (2 Replies)
Discussion started by: yhacks
2 Replies

7. UNIX for Advanced & Expert Users

Issue with shared object in AIX

Hi All, I have a problem with the shared objects setup in AIX. We have a customized shell written by the developers over here. When i issue a MQ Series command (mqsilist) it is giving the error as . All the commands making use of this libImbCmdLib.a.so is failing. But when executed in normal... (1 Reply)
Discussion started by: dhanamurthy
1 Replies

8. AIX

Shared Object library problem

Hi, When using shared objects on AIX 4.3 i am getting runtime problems. I have a small sample program which links to a shared object libray, oracle and system related libraries. At runtime it fails (gives segmentation fault and coredump ) in one proc file when executing login statement. But... (0 Replies)
Discussion started by: suman_jakkula
0 Replies

9. Linux

Shared Object File

Hi All, I created the share object file using gcc -shared -fpic mypp.cpp -o myp.so but, pls tell me how to link this .so file to my client program. Thanks (0 Replies)
Discussion started by: sarwan
0 Replies

10. Programming

Does my ld support shared object creation

Hi, I have been trying to create a sharef object on my HP UX 11 machine (HP-UX <myhostname> B.11.00 A 9000/879 ...... two-user license) to create the shared object first I am creating the object file using cc -Aa -c +z dyn.c (I use -Aa and +z as per HP's manual on linkers ) to create the... (0 Replies)
Discussion started by: linuxpenguin
0 Replies
Login or Register to Ask a Question