Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Dec 2021 12:47:27 +0100 (CET)
From:      Ronald Klop via freebsd-current <freebsd-current@freebsd.org>
To:        Piper H <potthua@gmail.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: question on socket server
Message-ID:  <1432797344.570.1639568847473@localhost>
In-Reply-To: <CA%2BGLnbhqwAWJYDxO0MV27mXhvyqWBdPPnAVd6mfQdiNWvuvahA@mail.gmail.com>
References:  <CA%2BGLnbiqXQDfMLovYgipiLjSvRSWk%2B1ukDrh779=zZDt3P2L7Q@mail.gmail.com> <1412287950.345.1639565502579@localhost> <CA%2BGLnbhqwAWJYDxO0MV27mXhvyqWBdPPnAVd6mfQdiNWvuvahA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_569_1908596974.1639568847444
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

Your program first waits for the first client to connect. So nothing is written anywhere.
You can check by running "nc -v localhost 6666" in another terminal.
After the first client disconnects it keeps looping in the while and the print will return 0 which means failure.

Something like this will improve things.

        if (0 == print "test\015\012") {
                return;
        }


Regards and happy hacking,
Ronald.

PS: I think this does not have to do a lot with freebsd-current. Might move it to https://lists.freebsd.org/subscription/freebsd-perl or some generic perl forum/ML.

 
Van: Piper H <potthua@gmail.com>
Datum: woensdag, 15 december 2021 11:55
Aan: Ronald Klop <ronald-lists@klop.ws>
CC: freebsd-current@freebsd.org
Onderwerp: Re: question on socket server
> 
> But I write this program to listen on port 6666 who sends a random str to the socket every 0.25 second. And there is no client connecting to the port. The server just runs there without problem. :( So I am not sure enough...
>  
> use strict;
> 
> package MyPackage;
> use base qw(Net::Server);
> 
> 
> my @fruit=qw(
> ...
> );
> 
> 
> sub process_request {
>     my $self = shift;
>     $| = 1;
>     my $max = scalar @fruit;
> 
>     while (1) {
>         my $id1 = int(rand($max));
>         my $str = $fruit[$id1];
> 
>         print "$str\015\012";
>         select(undef, undef, undef, 0.25);
>     }
> }
>  
> MyPackage->run(port => 6666, ipv => '*');
>  
> On Wed, Dec 15, 2021 at 6:51 PM Ronald Klop <ronald-lists@klop.ws> wrote:
>> 
>> Hi,
>> 
>> Just try it!
>> 
>> I think you will get an error that you are writing to a not-connected socket.
>> From "man 2 write":
>> "     [EPIPE]            An attempt is made to write to a socket of type SOCK_STREAM that is not connected to a peer socket."
>> 
>> See also "man 2 send"  and "man 2 socket" for a lot more information.
>> 
>> So it depends a bit on the type of socket you created.
>> 
>> Regards and happy hacking,
>> Ronald.
>> 
>>  
>> Van: Piper H <potthua@gmail.com>
>> Datum: woensdag, 15 december 2021 07:52
>> Aan: freebsd-current@freebsd.org
>> Onderwerp: question on socket server
>>> 
>>> Hello
>>> 
>>> I have little knowledge about socket programming.
>>> I have a question that, if I have made a socket server, listening on a
>>> port. The server prints data to the socket, but there is never a client
>>> connection to the port, and the data is never consumed. What will happen to
>>> the server then? will the OS kernel be flushed by junk bytes?
>>> 
>>> Thanks for your help.
>>> Piper
>>> 
>>> 
>>> 
>> 
> 
------=_Part_569_1908596974.1639568847444--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1432797344.570.1639568847473>