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 DEBIAN
coro::socket
Socket(3pm) User Contributed Perl Documentation Socket(3pm)NAME
Coro::Socket - non-blocking socket-I/O
SYNOPSIS
use Coro::Socket;
# listen on an ipv4 socket
my $socket = new Coro::Socket PeerHost => "localhost",
PeerPort => 'finger';
# listen on any other type of socket
my $socket = Coro::Socket->new_from_fh
(IO::Socket::UNIX->new
Local => "/tmp/socket",
Type => SOCK_STREAM,
);
DESCRIPTION
This module is an AnyEvent user, you need to make sure that you use and run a supported event loop.
This module implements socket-handles in a coroutine-compatible way, that is, other coroutines can run while reads or writes block on the
handle. See Coro::Handle, especially the note about prefering method calls.
IPV6 WARNING
This module was written to imitate the IO::Socket::INET API, and derive from it. Since IO::Socket::INET does not support IPv6, this module
does neither.
Therefore it is not recommended to use Coro::Socket in new code. Instead, use AnyEvent::Socket and Coro::Handle, e.g.:
use Coro;
use Coro::Handle;
use AnyEvent::Socket;
# use tcp_connect from AnyEvent::Socket
# and call Coro::Handle::unblock on it.
tcp_connect "www.google.com", 80, Coro::rouse_cb;
my $fh = unblock +(Coro::rouse_wait)[0];
# now we have a perfectly thread-safe socket handle in $fh
print $fh "GET / HTTP/1.0 15 12 15 12";
local $/;
print <$fh>;
Using "AnyEvent::Socket::tcp_connect" gives you transparent IPv6, multi-homing, SRV-record etc. support.
For listening sockets, use "AnyEvent::Socket::tcp_server".
$fh = new Coro::Socket param => value, ...
Create a new non-blocking tcp handle and connect to the given host and port. The parameter names and values are mostly the same as for
IO::Socket::INET (as ugly as I think they are).
The parameters officially supported currently are: "ReuseAddr", "LocalPort", "LocalHost", "PeerPort", "PeerHost", "Listen", "Timeout",
"SO_RCVBUF", "SO_SNDBUF".
$fh = new Coro::Socket PeerHost => "localhost", PeerPort => 'finger';
AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
perl v5.14.2 2012-04-13 Socket(3pm)