So, your program downloads the entire page, but doesn't stop there -- it calls recv() one more time when the transfer is done, which hangs until the web server becomes impatient and kicks you. Which is mecifully much less than the many minutes TCP usually defaults to. Then your program declares the download finished, writes another request to the dead socket, and "receives" another EOF in reply.
Reading until EOF might make sense without keepalives, but obviously won't do for persistent connections -- TCP/IP doesn't have an EOF signal, just an end of connection signal. This is why the web server must warn you of the content's length somehow -- as a content-length header, as chunked sections preprended with lengths in hexadecimal, etc.
Last edited by Corona688; 04-27-2016 at 01:47 PM..
Hello everyone, I am a newbie in UNIX/Linux socket programming. This is a class project that I had trouble with.
==================================================
I was trying to make “Keep-Alive” HTTP connections to the server in a tiny web crawler project. Here is the problem: when I tried... (0 Replies)
Hi,
I'm investigate about a problem regarding a connection between two server (S1 and S2).
A client software on S1 made a pool of connections on S2; for some reason some connections end but sockets still alive on S2 and not on S1.
I always knew about sockets as a pair of processes; is it... (1 Reply)
Hi
I want to keep my script running even when i am logged off from the box.
can we run the script in background which can automatically run every hour?
Please advise.
Thank you (1 Reply)
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)
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)
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)
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)
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)
Odd thing.
I posted in the Solaris forum, new user, just asking for a bit of advice. Nothing too complicated. As of this post there have been 140 views and zero replies. So that got me thinking, is this normal? I had a look around, and I see the same thing on many other threads, and in other... (2 Replies)
Discussion started by: _JonB_
2 Replies
LEARN ABOUT HPUX
socket
socket(7) Miscellaneous Information Manual socket(7)NAME
socket - interprocess communications
DESCRIPTION
Sockets are communication endpoints that allow processes to communicate either locally or remotely. They are accessed by means of a set of
system calls (see socket(2)).
The following requests are defined in (see ioctl(2)):
If the int with the address
arg is non-zero, the socket is put into non-blocking mode. Otherwise, the socket is put into blocking mode. Blocking mode
is the default. The request is equivalent to the request, although using is not recommended. See accept(2), connect(2),
recv(2), and send(2) for an explanation of how non-blocking mode is used.
For SOCK_STREAM sockets, the number of bytes currently readable from this socket is returned in the integer with the address
arg. For SOCK_DGRAM sockets, the number of bytes currently readable, plus the size of the sockaddr structure (defined in is
returned in the integer with the address arg.
For SOCK_STREAM TCP sockets, on return the integer with the address arg is non-zero if the inbound TCP stream has been read up
to where the out-of-band data byte starts. Otherwise, the inbound TCP stream has not yet been read up to where the out-of-
band data byte starts. For sockets other than SOCK_STREAM TCP sockets, on return the integer with the address arg is always
zero.
This request sets the process group or process
ID associated with the socket to be the value of the integer with the address arg. A process group or process ID associated
with the socket in this manner is signaled when the state of the socket changes: is delivered upon the receipt of out-of-
band data; is delivered if the socket is asynchronous, as described in below. If the value of the integer with the address
arg is positive, the signal is sent to the process whose process ID matches the value specified. If the value is negative,
the signal is sent to all the processes that have a process group equal to the absolute value of the value specified. If
the value is zero, no signal is sent to any process. It is necessary to issue this request with a non-zero integer value to
enable the signal delivery mechanism described above. The default for the process group or process ID value is zero.
This request returns the process group or process
ID associated with the socket in the integer with the address arg. See the explanation for above for more details on the
meaning of the integer value returned.
If the integer whose address is
arg is non-zero, this request sets the state of the socket as asynchronous. Otherwise, the socket is put into synchronous
mode (the default). Asynchronous mode enables the delivery of the signal when either of the following conditions is met.
o New data arrives.
o For connection-oriented protocols, whenever additional outgoing buffer space becomes available or the connection is
established or broken.
The process group or process ID associated with the socket must be non-zero in order for signals to be sent. The signal is
delivered according to the semantics of described above.
The fcntl(2) and flags (defined in are supported by sockets. If the flag is set, the socket is put into POSIX-style non-blocking mode. If
the flag is set, the socket is put into non-blocking mode. Otherwise, the socket is put into blocking mode. Blocking mode is the default.
See accept(2), connect(2), recv(2), and send(2) for an explanation of how these forms of non-blocking mode are used.
Since the and flags and requests are supported, the following clarifies on how these features interact. If the or flag has been set, and
requests behave accordingly, regardless of any requests. If neither the flag nor the flag has been set, requests control the the behavior
of and
DEPENDENCIES
AF_CCITT Only
Only the and requests are defined for sockets.
AUTHOR
was developed by the University of California, Berkeley.
SEE ALSO fcntl(2), getsockopt(2), ioctl(2), socket(2).
socket(7)