digitalmars.D - std.socket with GDC
- Joseph Bell (37/37) Jan 23 2007 Howdy.
- kris (5/58) Jan 23 2007 Joseph,
-
Chris Miller
(6/16)
Jan 23 2007
On Wed, 24 Jan 2007 01:09:52 -0500, Joseph Bell
... - Joseph Bell (4/24) Jan 24 2007 Thanks Chris - that indeed was the trick - I haven't delved deep enough
Howdy.
I'm currently using gdc (should I switch to dmd? What would that provide
me?)
and the following should be functional but it isn't:
I create a UDP socket, Address family is INET, I create the address as
my loopback on the given port.
I bind. Blocking returns true, isAlive returns true. So I'm blocking,
I'm alive, and then I hit receiveFrom which should block until I have
something to read. That falls right through. :-(
I searched high and low for working examples of client-server programs
(you can refer me to those too if they exist) to no avail. I sure hope
this is a boneheaded mistake on my part.
Thanks for any insight,
Joe
import std.socket;
import std.stdio;
void main() {
UdpSocket sock = new UdpSocket(AddressFamily.INET);
InternetAddress sockAddr = new InternetAddress("127.0.0.1", 3001);
writefln("%s", sockAddr.toString());
sock.bind(sockAddr);
if (sock.blocking()) {
writefln("Socket is blocking");
}
if (sock.isAlive()) {
writefln("Socket alive");
}
ubyte[] buf;
Address receiveAddress;
int bytes;
bytes = sock.receiveFrom(buf, receiveAddress);
if (bytes) {
writefln("Received %d bytes", bytes);
} else {
writefln("Error or nothing received");
}
}
Jan 23 2007
Joseph Bell wrote:
Howdy.
I'm currently using gdc (should I switch to dmd? What would that provide
me?)
and the following should be functional but it isn't:
I create a UDP socket, Address family is INET, I create the address as
my loopback on the given port.
I bind. Blocking returns true, isAlive returns true. So I'm blocking,
I'm alive, and then I hit receiveFrom which should block until I have
something to read. That falls right through. :-(
I searched high and low for working examples of client-server programs
(you can refer me to those too if they exist) to no avail. I sure hope
this is a boneheaded mistake on my part.
Thanks for any insight,
Joe
import std.socket;
import std.stdio;
void main() {
UdpSocket sock = new UdpSocket(AddressFamily.INET);
InternetAddress sockAddr = new InternetAddress("127.0.0.1", 3001);
writefln("%s", sockAddr.toString());
sock.bind(sockAddr);
if (sock.blocking()) {
writefln("Socket is blocking");
}
if (sock.isAlive()) {
writefln("Socket alive");
}
ubyte[] buf;
Address receiveAddress;
int bytes;
bytes = sock.receiveFrom(buf, receiveAddress);
if (bytes) {
writefln("Received %d bytes", bytes);
} else {
writefln("Error or nothing received");
}
}
Joseph,
Here's a great resource for you:
http://beej.us/guide/bgnet/output/htmlsingle/bgnet.html
- Kris
Jan 23 2007
On Wed, 24 Jan 2007 01:09:52 -0500, Joseph Bell <josephabell tx.rr.com> =
=
wrote:
[snip]
ubyte[] buf;
Address receiveAddress;
int bytes;
bytes =3D sock.receiveFrom(buf, receiveAddress);
if (bytes) {
writefln("Received %d bytes", bytes);
} else {
writefln("Error or nothing received");
}
}
Give it some memory to write into... buf =3D new ubyte[1000];
and then buf[0 .. bytes] is valid, assuming no errors.
Jan 23 2007
Thanks Chris - that indeed was the trick - I haven't delved deep enough into D to know if my expectation of being able to pass an unbounded array has any merit. Suffice it to say, this works - thank you. Chris Miller wrote:On Wed, 24 Jan 2007 01:09:52 -0500, Joseph Bell <josephabell tx.rr.com> wrote: [snip]ubyte[] buf; Address receiveAddress; int bytes; bytes = sock.receiveFrom(buf, receiveAddress); if (bytes) { writefln("Received %d bytes", bytes); } else { writefln("Error or nothing received"); } }Give it some memory to write into... buf = new ubyte[1000]; and then buf[0 .. bytes] is valid, assuming no errors.
Jan 24 2007









kris <foo bar.com> 