11-22-2007
You just need the single select statement as you have now, but by spawning the child process to do the reading and converting it into a pipe message you can now effectively select on both tcp sockets and the pipe for the message queue.
I suggest you may want to add a length based messaging protocol so that you can preserve the message boundaries from the message queue. Eg you write on the pipe each dequeued message with a four byte prefix indicating the length of the message. Then when you read from the pipe, you can read four bytes, then know the total length of the single message and then read that.
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
1. If I use an software application(which connects to the database in the server) in my local pc, how many PID should be registered? Would there be PID for the session and another PID for socket connection?
2. I noticed (through netstat) that when I logged in using the my software application,... (1 Reply)
Discussion started by: pcx26
1 Replies
2. UNIX for Advanced & Expert Users
Hello,
I need help to replace the ................. of client.c that request the server implemented by server.c
------------------
Listing 1 - server.c
/* Inclusion des différentes librairies nécessaires */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
... (0 Replies)
Discussion started by: bounkolh
0 Replies
3. UNIX for Dummies Questions & Answers
Sorry if this is a stupid question!
I have been developing a Java application that I am deploying on both Unix and Linux servers, which uses lots of socket handling. When the server side connection is dropped by the server un-gracefully I have been seeing close_waits and null connections.
... (0 Replies)
Discussion started by: Vinnie
0 Replies
4. Programming
I have a socket and a message queue over which i am trying to multiplex input using select().
When data comes over socket the select works but when it comes over message queue the select is not detecting it .
Create_Q gets the identifier of the messege queue.
... (1 Reply)
Discussion started by: shaurya.rastogi
1 Replies
5. UNIX for Advanced & Expert Users
Hi,
I was porting ipv4 application to ipv6; i was done with TCP transports. Now i am facing problem with SCTp transport at runtime.
To test SCTP transport I am using following server and client socket programs. Server program runs fine, but client program fails giving Invalid Arguments for... (0 Replies)
Discussion started by: chandrutiptur
0 Replies
6. Programming
Hi all,
On the server side, one socket is used for listening, the others are used for communicating with the client.
My question is: if i want to set option for socket, which socket should be set on?
If either can be set, what's the different?
Again, what's the different if set option... (1 Reply)
Discussion started by: blademan100
1 Replies
7. Programming
Why does this socket function only read the first 1440 chars of the stream. Why not the whole stream ? I checked it with gdm and valgrind and everything seems correct...
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include... (3 Replies)
Discussion started by: cyler
3 Replies
8. Programming
Dear Experts,
i am compiling my code in suse 4.1 which is compiling fine,
but at runtime it is showing me for socket programming error no 88
as i searched in errno.h it is telling me socket operation on non socket,
what is the meaning of this , how to deal with this error , please... (1 Reply)
Discussion started by: vin_pll
1 Replies
9. IP Networking
I need clarification on whether it is okay to set socket options on a listening socket
simultaneously when it is being used in an accept() call?
Following is the scenario:-
-- Task 1 - is executing in a loop - polling a listen socket, lets call it 'fd', (whose file descriptor is global)... (2 Replies)
Discussion started by: jake24
2 Replies
10. Programming
Hello, I'm stuck and this is a matter which I need to resolve quite fast (but I couldn't post in the "Emergency" section); the problem is this :
I have created a chat program in which the client sends the sentence to the server and then the server should send it to all the clients connected,... (2 Replies)
Discussion started by: timmyyyyy
2 Replies
LEARN ABOUT DEBIAN
curvecpclient
NaCl(1) General Commands Manual NaCl(1)
NAME
CurveCP -- Message-handling programs
SYNOPSIS
curvecpclient [-q (optional)] [-Q (optional)] [-v (optional)] [-c keydir(optional)] [sname] [pk] [ip] [port] [ext] [prog]
DESCRIPTION
This manual page documents briefly the CurveCP commands.
A traditional UNIX-style server such as ftpd handles just one network connection, reading input from stdin and writing output to stdout. A
"superserver" such as inetd or tcpserver listens for network connections and starts a separate server process for each connection.
The CurveCP command-line tools have an extra level of modularity. The curvecpserver superserver listens for network connections. For each
connection, curvecpserver starts the curvecpmessage message handler; curvecpmessage then starts a server such as ftpd. Then ftpd sends a
stream of data to curvecpmessage, which in turn sends messages to curvecpserver, which encrypts and authenticates the messages and sends
them inside network packets. At the same time curvecpclient receives network packets, verifies and decrypts messages inside the packets,
and passes the messages to curvecpmessage; curvecpmessage sends a stream of data to ftpd. The same curvecpmessage tool is also used by
curvecpclient.
curvecpserver and curvecpclient can use programs other than curvecpmessage. Those programs can directly generate messages in the CurveCP
message format without talking to separate tools such as ftpd; or they can support a completely different protocol that reuses CurveCP's
cryptographic layer but transmits different kinds of messages.
This page explains what programmers have to do to write curvecpmessage replacements that talk to curvecpserver and curvecpclient.
Incoming messagess
File descriptor 8 is a pipe. Read from this pipe a length byte n, between 1 and 68, and a 16*n-byte message. Repeat. The pipe is set to
non-blocking mode; be prepared for EAGAIN and EWOULDBLOCK, even in the middle of a message.
This pipe reading must always be active. The curvecpclient and curvecpserver programs assume that every message is read immediately. If you
can't handle a message immediately, read it and put it onto a queue. If you don't have queue space, throw the message away; this shouldn't
cause trouble, since you have to be able to handle missing messages in any case.
Outgoing messagess
File descriptor 9 is a pipe. Write to this pipe a length byte n, between 1 and 68, and a 16*n-byte message. Repeat. The pipe is set to
non-blocking mode; be prepared for EAGAIN and EWOULDBLOCK, even in the middle of a message.
As a client, do not use length bytes above 40 until a message has arrived from the server. (The messages inside CurveCP Initiate packets
are limited to 640 bytes.)
The CurveCP server does not start until it has received a message from the client. Furthermore, the CurveCP server must receive this mes-
sage within 60 seconds of the client starting up. (The CurveCP Initiate packet is valid for only 60 seconds after the corresponding CurveCP
Cookie packet.) This does not mean that the client must start sending messages immediately, but it does mean that waiting for more than a
second to send a message is a bad idea.
OPTIONS
How to use curvecpclient:
-q optional
no error messages
-Q optional
print error messages (default)
-v optional
print extra information
-c keydir optional
use this public-key directory
sname server's name
pk server's public key
ip server's IP address
port server's UDP port
ext server's extension
prog run this client
SEE ALSO
curvecpserver (1), curvecpmessage (1), inetd (8), tcpserver (1).
AUTHOR
This manual page was written by Sergiusz Pawlowicz debian@pawlowicz.name for the Debian system (and may be used by others). The source of
this page is a webpage http://curvecp.org/messageapi.html . Permission is granted to copy, distribute and/or modify this document under
public domain.
This manual page was rewritten for the Debian distribution because the original program does not have a manual page.
NaCl(1)