From: "Bart van den Burg" Newsgroups: comp.os.msdos.djgpp Subject: errors when linking winsock prog Date: Mon, 28 Apr 2003 02:35:44 +0200 Organization: Planet Internet Lines: 171 Message-ID: NNTP-Posting-Host: ip503cca9b.speed.planet.nl X-Trace: reader08.wxs.nl 1051490932 7187 80.60.202.155 (28 Apr 2003 00:48:52 GMT) X-Complaints-To: abuse AT planet DOT nl NNTP-Posting-Date: 28 Apr 2003 00:48:52 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com hi I'm writing myself a socket.cpp source is below it compiles fine, but when I try to link it to some other file, i get these errors: c:/djgpp/tmp/cckqc7rS.o(.text+0x174):socket.cpp: undefined reference to `_send' c:/djgpp/tmp/cckqc7rS.o(.text+0x338):socket.cpp: undefined reference to `_recv' c:/djgpp/tmp/cckqc7rS.o(.text+0x400):socket.cpp: undefined reference to `_gethostbyname' c:/djgpp/tmp/cckqc7rS.o(.text+0x4a6):socket.cpp: undefined reference to `_connect' c:/djgpp/tmp/cckqc7rS.o(.text+0x50e):socket.cpp: undefined reference to `_socket' c:/djgpp/tmp/cckqc7rS.o(.text+0x57b):socket.cpp: undefined reference to `_getprotobyname' collect2: ld returned 1 exit status what am I missing here? thanks Bart ----------- socket.h ------------------------------------------------- #ifndef SOCKET_H #define SOCKET_H #ifdef __linux__ #include #include #endif #ifdef MSDOS #include #include #endif #include #include #include #include #include #include extern int errno; using namespace std; class Socket { private: int read(); string buffer; int socket; int create(); int connect(); string line; public: int protocol, port; char *server; bool nonblock; int open(char *, int, char *); int readline(string &); int write(string); }; #endif // SOCKET_H ---------------------------------------------------------------------- ----------- socket.cpp ----------------------------------------------- #include "socket.h" int Socket::readline(string &retline) { line = '\0'; retline = '\0'; if (read() == -1) { return -1; } if (line.length() > 1) { retline = line; return 1; } } int Socket::write(string data) { if (1) cout << "TX: " << data << endl; data = data + "\r\n"; char *array = new char[data.length() + 1]; strcpy(array, data.c_str()); int length = send(socket, array, data.length(), 0); delete []array; } int Socket::read() { char temp[1024]; errno = 0; int pos; if ((pos = buffer.find('\r')) > 0) { line = buffer.substr(0, pos); buffer = buffer.substr(pos + 2, buffer.length()); if (1) cout << "RX: " << line << endl; return 1; } int length = recv(socket, temp, 1023, 0); if (length > 0) { if (!errno) { temp[length] = 0; buffer.append(temp); return 0; } } else if (length == 0 && errno != 11) { return -1; } else return 0; } int Socket::connect() { struct sockaddr_in sin; struct hostent *he; if (!(he = gethostbyname(server))) { cout << "Could not resolve hostname: " << server << endl; return 0; } sin.sin_family = AF_INET; memcpy(&sin.sin_addr, he->h_addr_list[0], he->h_length); sin.sin_port = htons(port); ::connect(socket, (struct sockaddr *)&sin, sizeof(sin)); cout << "Connection returned: " << strerror(errno) << endl; } int Socket::create() { if ((socket = ::socket(PF_INET, SOCK_STREAM, protocol)) < 0) { return 0; } if (nonblock) { int flags = fcntl(socket, F_GETFL); flags |= O_NONBLOCK; fcntl(socket, F_SETFL, flags); } } int Socket::open(char *server, int port, char *protocol) { struct protoent *proto = getprotobyname(protocol); Socket::protocol = proto->p_proto; Socket::port = port; Socket::server = server; create(); connect(); } ---------------------------------------------------------------------- ---------- test.cpp -------------------------------------------------- #include "socket.h" #include #include using namespace std; int main() { Socket socket; socket.open("localhost", 21, "tcp"); while(1) { string read; socket.readline(read); } } ----------------------------------------------------------------------