error when using TcpSocket
    zsxxsz 
    zhengshuxin at hexun.com
       
    Sat May 16 08:09:29 PDT 2009
    
    
  
I rewrote the code as below:
import std.c.string;
import core.stdc.errno;
import std.stdio;
import std.socket;
import std.stream;
import std.socketstream;
import core.sys.posix.netinet.in_;
class CSocket: Socket
{
public:
        this(AddressFamily family)
        {
                super(family, SocketType.STREAM, ProtocolType.TCP);
        }
        this()
        {
                this(cast(AddressFamily)AddressFamily.INET);
        }
        void connect(string ip, ushort port)
        {
                sockaddr_in sin;
                sin.sin_family = AF_INET;
                sin.sin_port = htons(port);
                sin.sin_addr.s_addr = inet_addr("127.0.0.1");
                int ret = .connect(handle, cast(sockaddr*) &sin, sin.sizeof);
                if (ret == -1)
                        throw new SocketException("Unable to connect socket");
        }
}
Socket sock_connect(string addr, ushort port)
{
        Socket sock;
        Address address = new InternetAddress(addr, port);
        try {
                sock = new TcpSocket(address);
        } catch (Exception e) {
                throw e;
        }
        return (sock);
}
Socket sock_connect2(string add, ushort port)
{
        CSocket sock = new CSocket();
        try {
                sock.connect("127.0.0.1", 80);
        } catch (Exception e) {
                throw e;
        }
        return (sock);
}
void test_socket(string addr, ushort port)
{
        Socket sock;
        try {
                //sock = sock_connect2(addr, port);
                sock = sock_connect(addr, port);
        } catch (Exception e) {
                throw e;
        }
        Stream ss = new SocketStream(sock);
        writefln("socket: %d", sock.handle());
        try {
                ss.writeString("GET / HTTP/1.0\r\n\r\n");
        } catch (Exception e) {
                printf("error: %s\n", strerror(errno));
                throw e;
        }
        while (!ss.eof) {
                char[] line;
                try {
                        line = ss.readLine();
                } catch (Exception e) {
                        printf("error: %s\n", strerror(errno));
                        throw e;
                }
                writefln("%s", line);
        }
}
int main(string[] args)
{
        test_socket("127.0.0.1", 80);
        return (0);
}
when use myown socket class and call sock_connect2(), I can get the correct
result. But when I use the TcpSocket of phobos2.029, I get one error as
"std.stream.WriteException: unable to write to stream".
Why?
Thanks
zsxxsz
    
    
More information about the Digitalmars-d-learn
mailing list