[Mono-devel-list] TLS: normal versus __thread
Michael Rasmussen
mir at miras.org
Thu Mar 24 11:41:23 EST 2005
tor, 24 03 2005 kl. 17:25 +0100, skrev Zoltan Varga:
> No, its just an optimization.
>
Maybe, but it seems to be the only difference in the runtime
environments between a working solution with fork.
You are welcome to try this small code snippet:
// project created on 21-03-2005 at 15:16
using System;
using System.Net.Sockets;
using System.IO;
using Mono.Posix;
namespace TCPSocketServer
{
public class Server
{
private StreamWriter streamWriter;
private StreamReader streamReader;
public Server(int port)
{
System.Int32 pid, sid;
pid = Syscall.fork();
if (pid < 0) {
Syscall.exit(1);
}
/* If we got a good PID, then
we can exit the parent process. */
if (pid > 0) {
Console.WriteLine("Parent: Signing off!");
Console.WriteLine("Parent PID: " + pid);
Syscall.exit(0);
}
/* Create a new SID for the child process */
sid = Syscall.setsid();
if (sid < 0) {
Console.WriteLine("Could not get a pid for child");
Syscall.exit(1);
}
Console.WriteLine("Client running as deamon with pid " + sid);
CreateSocket(port);
if (!StartServer()) {
Console.WriteLine("Unable to start server");
Syscall.exit(1);
}
}
public static void Main(string[] args)
{
int port;
if (args.Length > 0)
port = Convert.ToInt32(args[0]);
else
port = 1234;
new Server(port);
}
private bool CreateSocket(int port)
{
TcpListener tcpListener = new TcpListener(port);
tcpListener.Start();
Console.WriteLine("Server started");
Socket socket = tcpListener.AcceptSocket();
try
{
if (socket.Connected) {
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socket);
streamWriter = new StreamWriter(networkStream);
streamReader = new StreamReader(networkStream);
}
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
return false;
}
return true;
}
private bool StartServer()
{
while (true) {
string input = streamReader.ReadLine();
Console.WriteLine("Client: " + input);
streamWriter.WriteLine("Hi dude. You sent this:\n" + input);
streamWriter.Flush();
}
}
}
}
Hilsen/Regards
Michael Rasmussen
Get my public GnuPG keys:
michael rasmussen cc
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xD3C9A00E
mir datanom net
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE501F51C
mir miras org
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
--------------------------------------------------------------
Debian Hint #25: If you would like to thank a maintainer for handling an
issue, check out reportbug --kudos.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Dette er en digitalt underskrevet brevdel
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20050324/16849ad7/attachment.bin
More information about the Mono-devel-list
mailing list