Автор
|
Тема: sockets & linux ;))
|
DEiL |
опубликован 14-09-2001 19:03 MSK
типа... КАк работать с сокетами в линуксе? то, что вместо SOCKET там int, вместо send вроде бы write, а connect, bind, recv и прочее есть. но млина, все структуры не те... полключаемые фалы левые какие-то... уууууууууу :( так что если у кого-нибудь есть сорц \ знания - поделитесь плиз. от этого зависит судьба нации !!! :)
|
purpe
|
опубликован 14-09-2001 22:23 MSK
я тебе в 1001 раз советую занятся тем примером из явы! я сам пытался сервак под линуксом на Си наваять - гиморное это занятие ... запаришься обработку ошибок писать :)ты хоть представляешь - как там многопотоковость организуется ? ну а если ты так упёрся, то штудируй упорно исходники апача, только ведь погрязнешь ты в нём :)
|
m_fox
|
опубликован 15-09-2001 12:06 MSK
Блин, ребята. Вам лень в заголовочные файлы заглядывать? WINSOCK2.H (строка 85) typedef u_int SOCKET; WINSOCK2.H (строка 78) typedef unsigned int u_int;Во вторых стек TCP/IP Microsoft тупо взяла у BSD UNIX c незначительными изменениями, которые можно обойти с помощью #ifdef'ами. По многопотоковасти: с 60-х годов UNIX был многопотоковой и многопользовательской ОС, в отличии от Windows, к-рая стала многопотоковой в году 93-94-м. В линуксе лучше использовать fork(), но и beginthread в Linux и в Windows пока еще никто не отменял. Ну и не обязательно писать многопотоковые приложения. Можно обойтись неблокирующими сокетами. И функции Sleep() есть там и там. Вполне лекго создавать портируемые сетевые консольные приложения на С для Windows и UNIX |
DEiL
|
опубликован 15-09-2001 14:19 MSK
yeah, I did it! ;) #include <string.h> #include <stdlib.h> #include <stdio.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/ioctl.h>int main(int argc, char* argv[]) { int listener; sockaddr_in sin; in_addr addr; unsigned long argp; int s1, connected; sockaddr addr1; listener = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); addr.s_addr = 0; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr = addr; sin.sin_port = htons(5051); ioctl(listener,FIONBIO,&argp); bind(listener,(struct sockaddr*) &sin,sizeof(sin)); listen(listener,10); socklen_t addr_len = sizeof(addr1); char *recieved = (char *)malloc(2); while (true) { s1=accept(listener,&addr1,&addr_len); if (s1 != -1) { connected = s1; }; if (recv(connected,recieved,1,0)==1) { recieved[1] = NULL; printf(recieved); }; }; return 0; } -)) |
lamo
|
опубликован 22-09-2001 15:55 MSK
нда. |