digitalmars.D - Need to synchronize Socket.send()?
- Max Kaufmann <max.kaufmann gmail.com> Aug 19 2007
- Brad Roberts <braddr puremagic.com> Aug 19 2007
- BCS <ao pathlink.com> Aug 19 2007
- BCS <ao pathlink.com> Aug 19 2007
Consider this threaded socket server:
import std.stdio;
import std.string;
import std.socket;
import std.thread;
void main() {
char[] ip = "127.0.0.1";
int port = 12345;
WorkerThread[] threads = [];
writefln("Listening on "~ip~":"~toString(port));
InternetAddress addr = new InternetAddress(ip,port);
Socket sock = new TcpSocket();
scope(exit) sock.close();
sock.bind(addr);
sock.listen(1);
while(1) {
WorkerThread worker = new WorkerThread(sock.accept());
worker.start();
}
}
class WorkerThread : Thread {
private:
Socket conn;
public:
this(Socket conn) {
super();
this.conn = conn;
writefln("Spawning New Thread.");
}
int run() {
byte[] bytesToSend = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
conn.send(bytesToSend);
return 0;
}
}
Is Socket.send() synchronized, or do I need to synchronize it myself?
Aug 19 2007
Max Kaufmann wrote:Consider this threaded socket server: import std.stdio; import std.string; import std.socket; import std.thread; void main() { char[] ip = "127.0.0.1"; int port = 12345; WorkerThread[] threads = []; writefln("Listening on "~ip~":"~toString(port)); InternetAddress addr = new InternetAddress(ip,port); Socket sock = new TcpSocket(); scope(exit) sock.close(); sock.bind(addr); sock.listen(1); while(1) { WorkerThread worker = new WorkerThread(sock.accept()); worker.start(); } } class WorkerThread : Thread { private: Socket conn; public: this(Socket conn) { super(); this.conn = conn; writefln("Spawning New Thread."); } int run() { byte[] bytesToSend = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; conn.send(bytesToSend); return 0; } } Is Socket.send() synchronized, or do I need to synchronize it myself?
In your example, each connection is it's own unique socket, so there's no need to sync on anything. Later, Brad
Aug 19 2007
Reply to Max,Consider this threaded socket server:
Is Socket.send() synchronized, or do I need to synchronize it myself?
I'm no expert, but I'd guess not, each thread will get it's own socket, so that shouldn't be a problem and I'd be surprised if Socket.send is not thread safe.
Aug 19 2007
Reply to Benjamin,Reply to Max,Consider this threaded socket server:
Is Socket.send() synchronized, or do I need to synchronize it myself?
that you willnot
need to syncroniz it, each thread will get it's own socket, so that shouldn't be a problem and I'd be surprised if Socket.send is not thread safe.
x-b
Aug 19 2007









Brad Roberts <braddr puremagic.com> 