I am writing a crossplatform, multiprocess and multithreaded server using the "pre forking model" and the C language. Depending on the mode (multiprocess or multithread), the server just started, creates a set of processes/threads whose task is to process the requests of clients that are accepted by the main server. Because child processes are created before accepting a socket, they obviously do not inherit the accepted socket. In win32 I solved, duplicating the socket. How can I do in C linux?
Use a socket accepted by the parent process, in a child process created before accepting the socket
1k Views Asked by AudioBubble At
1
There are 1 best solutions below
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in LINUX
- Is there some way to use printf to print a horizontal list of decrementing hex digits in NASM assembly on Linux
- Why does Hugo generate different taxonomy-related HTML on different OS's?
- Writes in io_uring do not advance the file offset
- Why `set -o pipefail` gives different output even though the pipe is not failing
- what really controls the permissions: UID or eUID?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Docker container unable to make HTTPS requests to external API
- Whow to use callback_query_handler in Python 3.10
- Create kea runtime directory at startup in Yocto image
- Problem on CPU scheduling algorithms in OS
- How to copy files into the singularity sandbox?
- Android kernel error: undefined reference to `get_hw_version_platform'
- Is there a need for BPF Linux namespace?
- Error when trying to execute a binary compiled in a Kali Linux machine on an Ubuntu system
- Issue with launching application after updating ElectronJs to version 28.0.0 on Windows and Linux
Related Questions in SOCKETS
- Node.js Server + Socket.IO + Android Mobile Applicatoin XHR Polling Error...?
- My server TCP doesn't receive messages from the client in C
- how is strncpy able to copy from source to empty destination?
- Python Multicast packet receiver stops receiving multicast packets when computer is connected to WiFi
- Python Client-Server Communication with Protocol
- Reversed TLS re-connection issue
- Android 13 & 14 seem to close WebSocket connection, if i put app in background, after ~20s
- Java SocketException: Connection reset,. What is the cause?
- Multipart/form-data with chunked data transfer (ICAP protocol)
- View Socket View
- Client connection timeout during Android & Windows PC communication via sockets
- Browser connect to raw sockets even possible?
- Protocol 43200 after unpacking received data
- Unity SocketIo using Best http2 plugin want to use in webgl
- How does pre-allocating a pool of SocketAsyncEventArgs objects upfront improve the performance of a server application in c#
Related Questions in CLIENT-SERVER
- Is there a way to use Family Link group in my own application?
- Setting Up a Remote Employee Clocking System with Biometric Recognition
- Issues Starting Real-Time Streaming onClick of an Icon in an Android App
- Security of Google Drive API Objects using Google Service Account Credentials in Client Side Code for Website
- String formatting lost from URL string capture when sending from client to node js back-end
- cant send javascript variable to server-side code behind
- How to catch SSL handshake exception with asyncio.start_server?
- the client/server application is not working correctly
- Astrojs "window is not defined" error, even though i'm using client:only directive
- Client-Server command pattern
- How to send an image in a Client/Server architecture with Socket python
- Custom ThreadPool and Request Queue
- How can I handle multiple (compound) commands in a command server program?
- Timeout error when connecting a client to a server running on a different machine in Python
- Why is test deployment not working while normal deployment is OK
Related Questions in PREFORKING
- Celery prefork multiple workers
- `os.register_at_fork` `after_in_child` not called
- Enable HTTP2 in Apache 2.4.53
- How to detect death of parent in pre-fork server where all children block on accept()
- Traffic loss due to redirection or server resources
- Do I need gunicorn for internal async microservices?
- Use a socket accepted by the parent process, in a child process created before accepting the socket
- How can I make grouping optimize?
- prefork.c is not shown in httpd -l
- Updated Ubuntu and pcntl_fork stopped working (php)
- Celery scheduled tasks created inside other tasks do not go to broker immediately
- Moving prefork application under docker
- How can I display success page, while running long PHP script in background that requires POST Data?
- Prefork MPM configuration not in httpd.conf
- PHP readfile() never ends and makes Apache server hang
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Use an Unix domain socket instead of a pipe for any control communication between the parent and the child. Unlike pipes, they are bidirectional. If you use a datagram socket, each
send()corresponds to onerecv()and vice versa (ie. message boundaries are retained), which makes passing structures and such easier.The point is, you can pass descriptors between processes using an Unix domain socket. The cmsg man page has example code.
Essentially, before you fork the child processes, you create an Unix domain socket pair, unique for each child process, for control communication between the parent and the child. I recommend using an Unix domain datagram socket.
When the parent process wishes to hand off a connection to a child process, it sends the child a message, with an
SCM_RIGHTSancillary message containing the connected socket descriptor. (The kernel will handle the details of copying the descriptor over; just note that the descriptor number may differ in the receiving process.)This approach works not only in Linux, but in BSDs also.