W dniu 21 października 2011 00:03 użytkownik Wojtek Kaniewski <wojte...@toxygen.net> napisał: > Dnia 2011-10-18, wto o godzinie 21:02 +0200, Bartosz Brachaczek pisze: >> Różnice między oryginalnym libgadu a naszym forkiem są dość spore i w >> wielu miejscach nadmiarowe, ale kompiluje się on i działa nawet pod >> MSVC. > > Bardzo spore. Na początek pozamieniałem socketowe write() i read() na > send() i recv(). Chętnie bym pozbył się problemu z socketowym errno > jakąś magia makr. Na przykład do pliku nagłówkowego dać: > > #ifdef WIN32 > #define recv gg_win32_recv > #define send gg_win32_send > #endif > > A do pliku źródłowego: > > #undef recv > #undef send > > int map_wsa_error_to_errno(void) > { > switch (WSAGetLastError()) { > case WSAEINPROGRESS: return EINPROGRESS; > case WSAENOTCONN: return ENOTCONN; > case WSAEINTR: return EINTR; > case WSAECONNRESET: return ECONNRESET; > case WSAETIMEDOUT: return ETIMEDOUT; > } > > return EINVAL; > } > > ssize_t gg_win32_recv(int sockfd, void *buf, size_t len, int flags) > { > ssize_t res; > > res = recv(sockfd, buf, len, flags); > > if (res == -1) > errno = map_wsa_error_to_errno(); > > return res; > } > > ssize_t send(int sockfd, const void *buf, size_t len, int flags) > { > ssize_t res; > > res = send(sockfd, buf, len, flags); > > if (res == -1) > errno = map_wsa_error_to_errno(); > > return res; > } > > Plus/minus to, co się dzieje w gg_socket_busy(). Dzięki temu większość > zmian z patcha by zniknęło. Co o tym sądzisz?
Idea mi się podoba, spróbuję ją wprowadzić w życie w przypływie wolnego czasu. Uporządkuję przy okazji różnice z forka Kadu do jakiejś czytelnej i zarządzalnej serii łatek i wrzucę do jakiegoś publicznego repozytorium. Co do gg_socket_busy(), to powinno chyba wystarczyć case WSAEWOULDBLOCK: return EAGAIN; w map_wsa_error_to_errno(). Pozdrawiam, Bartosz _______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel