06-24-2011
Quote:
Originally Posted by
neutronscott
... so what exactly does recv() return from a dead server ... ?
Anything that's left in the buffer, like a pipe.
Imagine this scenario, you send 'HELLO' to the server and it sends 'SLARTIBARTFAST' back. However, some data's still in transit, and you don't know how much is coming, so you only read 'SLAR'. The rest arrives when you're not waiting for it.
Next time around, you try sending again. Between then and now the server's been set aflame by hostile pygmy shrews, but it'll take a few minutes of nonresponses for the client socket to realize that, so the socket optimistically accepts the data and begins transmitting it to the dead and smoking server. Since the send() is smaller than the buffer size, it doesn't even make you wait, it just goes. Following which you read a 'TIBARTFAST' which arrived minutes ago and decide everything's okay.
On try three, it's long since realized the server's flopped over and died, so the instant you write to it, you get SIGPIPE.
10 More Discussions You Might Find Interesting
1. UNIX for Advanced & Expert Users
Hi,
We have developed a server program using TCP/IP Communication to communicate with another client program. After running for some days we find the TCP/IP connection from the server program is getting slower.
What i mean to say is since the send() function in the server program (it is... (2 Replies)
Discussion started by: rajesh_puru
2 Replies
2. UNIX for Dummies Questions & Answers
Hi,
Users are connecting thru a KCML Client to UNIX machine, and I want to know which TCP/UDP port that client uses? How can I check the port of a user logged in?
Regards,
Tayyab (2 Replies)
Discussion started by: tayyabq8
2 Replies
3. UNIX for Advanced & Expert Users
Hi Experts,
need help about release or refresh TCP Connection:
i have the sample like below :
application log connection:
0500 ( 192.168.0.1:36053) 00919 2007/05/10 23:30:25 112 13 2007/05/10 23:30:25 1969/12/31 17:00:00
0500 ( 192.168.0.1:36054) 00920 2007/05/10 23:30:26 000 00... (3 Replies)
Discussion started by: bucci
3 Replies
4. Shell Programming and Scripting
Hello,
I am trying to write a script in Perl which will send some data from a UNIX Box to a windows box. I am planning to create a TCP/IP communication port for the same. How do I go about this? Kindly help.
Regards,
Garric (50 Replies)
Discussion started by: garric
50 Replies
5. Programming
Hello. I would like to know how to close an existing tcp socket. I have read some stuff and learned how to create a socket and then close it but have not found anything about how to close an existing tcp socket created by another application. The situation is this: I have an ODBC server running and... (6 Replies)
Discussion started by: raidzero
6 Replies
6. Solaris
Hello,
Actually there are some bugs in application which does not close the TCP connection to other server though CORBA.
We need to kill that ESTABLISHED connections as new connection are not happeneing as the allocated ports were used and showing as ESTABLISHED
Is there any... (4 Replies)
Discussion started by: GIC1986
4 Replies
7. UNIX for Dummies Questions & Answers
Dear experts,
I am seeing a lot of TCP failed connection attempts from "netstat -s" on one of our servers.
How can I pin point what connection failed and what are the ports involved?
Any tools/commands I can dig in deeper to diag. what went wrong on these "failed connection attempts"?
... (2 Replies)
Discussion started by: cache51
2 Replies
8. IP Networking
Why this happens?
How to solve this?
$netstat -na |grep 9325
tcp 0 0 127.0.0.1:9325 127.0.0.1:9325 ESTABLISHED
When a client socket repeatedly tries to connect to an inactive(no server socket is listening on this port) local port,connect succeeds.
... (1 Reply)
Discussion started by: johnbach
1 Replies
9. Solaris
Hi,
I use solaris Unix .
I find there is some problem in application and it generate many "close-wait" tcp connect and stay in the server . it is generate by process id 7740
root@XX # netstat -an | grep CLOSE_WAIT | wc -l
285
root@XX # netstat -an | grep CLOSE_WAIT
10.158.35.4.34805 ... (2 Replies)
Discussion started by: abcdef
2 Replies
10. UNIX for Dummies Questions & Answers
I am trying to send json messages to a port on a linux server from a remote server running a .net program. I have one implementation running with successful incoming messages to port 1514. I tried to replicate the same thing but just to another port but cannot get it to work as I get the following... (3 Replies)
Discussion started by: unienewbie
3 Replies
LEARN ABOUT DEBIAN
xpainfo
xpainfo(3) SAORD Documentation xpainfo(3)
NAME
XPAInfo - send short message to one or more XPA servers
SYNOPSIS
#include <xpa.h>
int XPAInfo(XPA xpa,
char *template, char *paramlist, char *mode,
char **names, char **messages, int n);
DESCRIPTION
Send a short paramlist message to one or more XPA servers whose class:name identifier matches the specified template.
A template of the form "class1:name1" is sent to the XPA name server, which returns a list of at most n matching XPA servers. A connection
is established with each of these servers and the paramlist string is passed to the server as the data transfer request is initiated. If an
XPA struct is passed to the call, then the persistent connections are updated as described above. Otherwise, temporary connections are made
to the servers (which will be closed when the call completes).
The XPAInfo() routine does not send data from a buf to the XPA servers. Only the paramlist is sent. The semantics of the paramlist is not
formalized, but at a minimum is should tell the server how to get more information. For example, it might contain the class:name of the
XPA access point from which the server (acting as a client) can obtain more info using XPAGet.
A string containing the class:name and ip:port of each server is returned in the name array. If a given server returned an error or the
server callback sends a message back to the client, then the message will be stored in the associated element of the messages array. The
returned message string will be of the form:
XPA$ERROR error-message (class:name ip:port)
or
XPA$MESSAGE message (class:name ip:port)
The return value will contain the actual number of servers that were processed. This value thus will hold the number of valid entries in
the names and messages arrays, and can be used to loop through these arrays. In names and/or messages is NULL, no information is passed
back in that array.
The following keywords are recognized:
key value default explanation
------ -------- -------- -----------
ack true/false true if false, don't wait for ack from server
When ack is false, XPAInfo() will not wait for an error return from the XPA server. This means, in effect, that XPAInfo will send its
paramlist string to the XPA server and then exit: no information will be sent from the server to the client. This UDP-like behavior is
essential to avoid race conditions in cases where XPA servers are sending info messages to other servers. If two servers try to send each
other an info message at the same time and then wait for an ack, a race condition will result and one or both will time out.
Example -
(void)XPAInfo(NULL, "IMAGE", "ds9 image", NULL, NULL, NULL, 0);
SEE ALSO
See xpa(7) for a list of XPA help pages
version 2.1.14 June 7, 2012 xpainfo(3)