Thread overview
IRC / std.sockets question
Jan 14, 2014
APott
Jan 14, 2014
APott
Jan 14, 2014
Adam D. Ruppe
Jan 14, 2014
APott
Jan 14, 2014
Jakob Ovrum
Jan 14, 2014
Vladimir Panteleev
Jan 14, 2014
Jakob Ovrum
Jan 14, 2014
Vladimir Panteleev
Jan 14, 2014
Jakob Ovrum
Jan 14, 2014
Vladimir Panteleev
January 14, 2014
Hello! I didn't really know if I should post here or not but I decided I should try. I recently started reading up on the IRC protocol and thought I would try to mess with it a bit and see if I could implement a server with a few features, just for fun. I'm already having trouble...
(I'm using the XChat client for testing)
If I've read the various specifications of the IRC protocol correctly the client should be the first one sending data to the server, either the pass message or the nick message (if a user). (If this is wrong stop right here and let me know)

With this assumption I was working with sockets and I'm failing to receive any data from the client, absolutely none. The connection is successful, the connection terminates when the socket is disposed of, I'm just getting absolutely no data from the client. Here's an example piece of code that would give this behavior:
```
Server.socket = new TcpSocket();
try {
    socket.bind(new InternetAddress(Server.port));
} catch (Exception e) {
    writeln(e.msg);
    return;
}
socket.listen(1);
		
Socket client = socket.accept();
byte[] buffer;
client.receive(buffer);
writeln(buffer);

client.shutdown(SocketShutdown.BOTH);
socket.close();

socket.shutdown(SocketShutdown.BOTH);
socket.close();
```
Any suggestions, corrections, or help with this is very much appreciated! I'm very curious on this subject. (I feel like I'm doing something really wrong or something... sometimes it takes more than 2 eyes to see something simple
January 14, 2014
Perhaps this was in the wrong section, sorry about that.
January 14, 2014
On Tuesday, 14 January 2014 at 03:42:29 UTC, APott wrote:
> byte[] buffer;
> client.receive(buffer);

These lines are wrong: receive needs a pre-allocated buffer with a certain size and it tries to fill it. Also generally ubyte is better for this than byte.

ubyte[1024] buffer;
auto got= client.receive(buffer);

if(got < 0) throw new Exception("error");
if(got == 0) writeln("end of file)
else auto receivedInfo = buffer[0 .. got]; /* use received info */
January 14, 2014
Wow, that's actually incredibly embarrassing... I can't believe I didn't notice this, I knew I was missing something simple.
Thanks for the help Adam!
January 14, 2014
On Tuesday, 14 January 2014 at 03:42:29 UTC, APott wrote:
> Hello! I didn't really know if I should post here or not but I decided I should try. I recently started reading up on the IRC protocol and thought I would try to mess with it a bit and see if I could implement a server with a few features, just for fun. I'm already having trouble...
> (I'm using the XChat client for testing)

Is your project open source? I'm working on a standard-compliant IRC client library for D called Dirk[1], and I'd love to follow progress on a server project. Perhaps Dirk can also aid you in testing :)

[1] https://github.com/JakobOvrum/Dirk
January 14, 2014
On Tuesday, 14 January 2014 at 08:05:53 UTC, Jakob Ovrum wrote:
> On Tuesday, 14 January 2014 at 03:42:29 UTC, APott wrote:
>> Hello! I didn't really know if I should post here or not but I decided I should try. I recently started reading up on the IRC protocol and thought I would try to mess with it a bit and see if I could implement a server with a few features, just for fun. I'm already having trouble...
>> (I'm using the XChat client for testing)
>
> Is your project open source? I'm working on a standard-compliant IRC client library for D called Dirk[1], and I'd love to follow progress on a server project. Perhaps Dirk can also aid you in testing :)

I wrote an IRC server for a project a few weeks ago:

https://github.com/CyberShadow/ae/blob/master/net/irc/server.d

There is a client in the same package.
January 14, 2014
On Tuesday, 14 January 2014 at 10:55:02 UTC, Vladimir Panteleev wrote:
> I wrote an IRC server for a project a few weeks ago:
>
> https://github.com/CyberShadow/ae/blob/master/net/irc/server.d
>
> There is a client in the same package.

Do you intend to work on it or is it just going to be "good enough" for a specific purpose? It looks pretty gung-ho...
January 14, 2014
On Tuesday, 14 January 2014 at 11:46:21 UTC, Jakob Ovrum wrote:
> On Tuesday, 14 January 2014 at 10:55:02 UTC, Vladimir Panteleev wrote:
>> I wrote an IRC server for a project a few weeks ago:
>>
>> https://github.com/CyberShadow/ae/blob/master/net/irc/server.d
>>
>> There is a client in the same package.
>
> Do you intend to work on it or is it just going to be "good enough" for a specific purpose?

I wrote it for a specific purpose:

https://github.com/CyberShadow/MyWormNET2

> It looks pretty gung-ho...

Sorry, I don't know what this expression means.
January 14, 2014
On Tuesday, 14 January 2014 at 13:13:04 UTC, Vladimir Panteleev wrote:
> I wrote it for a specific purpose:
>
> https://github.com/CyberShadow/MyWormNET2

Cool, I didn't know WormNET used IRC. It's surprisingly common in games.

>> It looks pretty gung-ho...
>
> Sorry, I don't know what this expression means.

Sorry, I'm not sure what it means either :V

I'm basically asking if it's intended as a library (or application) for use by others.

The implementation seems to support a subset of IRC - which I assume are the bare necessities required for your application - and it seems to make no attempt to minimize GC garbage, have a const-correct API, strict input policy, documentation etc. The list goes on.
January 14, 2014
On Tuesday, 14 January 2014 at 13:42:46 UTC, Jakob Ovrum wrote:
> I'm basically asking if it's intended as a library (or application) for use by others.
>
> The implementation seems to support a subset of IRC - which I assume are the bare necessities required for your application - and it seems to make no attempt to minimize GC garbage, have a const-correct API, strict input policy, documentation etc. The list goes on.

Ah, I see. At the moment I'm not interested in continuing to develop it as a general-purpose IRC server. Anyone's welcome to use it as a base or send pull requests, of course, and I can relicense it if MPL is not suitable.