I have a program which binds to a socket and listen on it. Later I spawn a thread to handle some function. In the new thread created I need to call a shell script which executes the specified function. Here I am using a system command to call the shell script.
In the new thread I created I am not using the socket for either reading/writing.
1. First thing I am not sure why the shell script that i am using is binding to the listen socket.
following is the extract from lsof
socket1 is my main thread where I am binding to port 4500. In the new thread created I am calling a shell script "runtest" which is also binding to the port 4500.
2. Is there a way that the new thread created does not bind to port 4500?
The problem became more worse when..
For some reason the shell script is hung for long time. In the mean time the main process is restarted due to a core in another thread.
Now when the process comes up it finds the socket is already in use and fails to bind to the socket.
The bind failure keeps happening until the shell script is killed or the script exits on its own.
[I have found a solution to hung thread issue, where in the shell script, I spawn a shell, sleep for sometime and kill the main thread if it still exits. If the main thread is not hung I will kill the new spawned shell (this piece of code is not in the example I have mentioned)]
Now I am looking a way to avoid the socket to be used by the newly spawned thread. I mean when the shell script is running it should not be bound to the listen socket that is created in the main thread.
bash-3.1$ ./socket1
Main thread in sleep for 300 secs
calling system function
total 12
-rwxrwxr-x 1 janardha janardha 53 May 7 06:49 runtest
-rw-rw-r-- 1 janardha janardha 1536 May 9 07:21 socket1.c
-rwxrwxr-x 1 janardha janardha 7096 May 9 07:22 socket1
In sleep
Just a guess, but: a thread isn't a "new" part of a program, but a part of the code that executes in parallel. A call to system() is, basically, a fork(), exec(), and wait(). And with fork() the complete context of the process is copied, including your socket.
One option that I can think of would be to do the fork() in the thread, clean up the environment, and then call system().
In your case, it should be enough to just close that copy of the socket. But I can't guarantee that it won't also close the parents socket, so you should test that first.
or call fcntl() with SET_FD and an argument of 1. This sets the close-on-exec flag to true for the socket. The parent's copy of the descriptor remains open.
Cannot present unpresented disks back again. On a test server tried this as a solution "multipath -r" and it worked. Too worried to try it in production before I know all the information.
Any info would be appreciated!
Also some links to the documentation on this specific issue could help a... (1 Reply)
Hello experts!
I need your help please
I have a file.txt of which I want to extract 3rd and 4th columns with date with the form e.g.:
2016-11-25 03:14:50and pass them to "date" command, but also append the 9th column in a file as well.
So I want to execute
date -d '2016-11-25 03:14:50' ... (2 Replies)
I have once experienced this problem without understanding what caused it but now learned thatn there is even a PMR dealing with it. Sometimes it happens that you encounter the following (rather cryptical) error message when trying to install an rpm-package:
package <rpm_package_name> is for a... (1 Reply)
Hello!!!
I'm trying to pass the output from bash command to perl variable in a perl script, and I used the "system" command to execute the bash statment and pass the result to perl string variable, in this perl script I used a variable $file that store data for using it as a regular expression.... (2 Replies)
Hi,
I have line in input file as below:
3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL
My expected output for line in the file must be :
"1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL"
Can someone... (7 Replies)
I'm trying to add a custom ("Hello world" :o) system call.
In /usr/src/linux/hello/ I put simple hello.c ...#include "linux/linkage.h" // for linking a system call
#include "linux/kernel.h" // for "printk"
asmlinkage int sys_hello()
{
printk(KERN_ALERT "Hello!");
return 1;
}... and in... (5 Replies)
Hello ;
This what i want to do :
I know that in the system call
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
you can specify the local port for your socket, but im using a private library , and im sure that in that library... (0 Replies)
hi,
I have a problem about the Oracle related components. I'm not able to find any answer yet, and waiting for your responses...
Here is the configuration of my system:
* an IBM P550 machine,
* an AIX 5.3 running on it and
* an oracle database, already installed on it.
The problem (or... (1 Reply)
hi,
I have
* an IBM P550 machine,
* an AIX 5.3 running on it and
* an oracle database, already installed on it.
The problem (or question of my own) is:
Oracle tns listener, "CT_LISTENER", and the enterprise manager (EM) of the instance, which is uniq instance and called... (0 Replies)
I have what appears to be a unique socket problem, although admittedly my tcp/ip programming experience is relatively limited.
I have a AIX server process using TCP/IP berkely sockets, and a Windows (C#) process. The windows process takes input from a user and sends a message to the Unix... (1 Reply)