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
- Passing arguments to main in C using Eclipse
- kernel module does not print packet info
- error C2016 (C requires that a struct or union has at least one member) and structs typedefs
- Drawing with ncurses, sockets and fork
- How to catch delay-import dll errors (missing dll or symbol) in MinGW(-w64)?
- Configured TTL for A record(s) backing CNAME records
- Allocating memory for pointers inside structures in functions
- Finding articulation point of undirected graph by DFS
- C first fgets() is being skipped while the second runs
- C std library don't appear to be linked in object file
- gcc static library compilation
- How to do a case-insensitive string comparison?
- C programming: Create and write 2D array of files as function
- How to read a file then store to array and then print?
- Function timeouts in C and thread
Related Questions in LINUX
- How do I recursively find and replace only in files named index.php on Linux webserver?
- passing text with \n as one argument in shell
- kernel module does not print packet info
- How to send ESC/POS commands to thermal printer in Linux
- (x64 Nasm) Writeline function on Linux
- How do I set the Hive user to something different than the Spark user from within a Spark program?
- Default priority of thread with SCHED_FIFO
- Calling a python function with options from shell script
- How to split a directory into parts without compressing or archiving?
- Cross compile simple standard C program on Linux for Mac
- How to offload NAPI poll function to workqueue
- python netifaces - How to get currently used network interface
- Unexpected output from function
- mingw-64 conflicting declarations when cross-compiling
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
Related Questions in SOCKETS
- Drawing with ncurses, sockets and fork
- UDP sockets in C not working
- How can I send multiple objects over one socket in java?
- psuedo TCP multicast with os.dup2() in python?
- My get request for http is very slow
- Nodejs connect mysql socket to another host?
- HttpRequestContext vs HttpContext
- Spring based client server communication without network
- Java does not accept 2 methods with same name
- Retrieve Data From EOC(Eithernet Over coxial) device
- Ping a server without freezing the Thread
- C sockets: Exit client after all data is received
- What is the best way to send XML converted to a byte array over TCP, then translate the response back to readable XML?
- C# Winform to Connect to Device Using IP
- Java Restart a Socket
Related Questions in CLIENT-SERVER
- Python socket stays blocked on socket.recv() when client expects data
- How to test java server without deployment?
- Client/server: running "nano editor" command from client
- Client/Server java - connection refused
- ZeroMQ Job Distribution
- Multithreading using Blocking IO corrupts file in Java
- Use Photoshop actions on the server
- difference between p2p and client-server node design
- Android | can't Send/Receive message to/from Wialon Server using Socket
- Raising alerts from backend javascript
- How do I send a Javascript/CSS file that corresponds to the HTML document in HTTP?
- What is Starbucks populating the URL with when I login?
- When can be socket client disconnected
- Janrain mobile integration using RESTFul API? for Windows, iOS and Andorid
- HTML-service pages to call server-side Apps Script functions with dialog box
Related Questions in PREFORKING
- apache/php module socket issue
- Preforking a Multithreaded Python application
- Enable HTTP2 in Apache 2.4.53
- prefork.c is not shown in httpd -l
- Equivalent of Ruby IO in PHP
- `os.register_at_fork` `after_in_child` not called
- Prefork vs worker module for apache, what is being used?
- How can I make grouping optimize?
- Is it necessary to use a lock for the accept function when doing socket programming?
- accept() with sockets shared between multiple processes (based on Apache preforking)
- Moving prefork application under docker
- Celery scheduled tasks created inside other tasks do not go to broker immediately
- Updated Ubuntu and pcntl_fork stopped working (php)
- PHP readfile() never ends and makes Apache server hang
- What exactly is a pre-fork web server model?
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.