git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 01/14] mingw: add network-wrappers for daemon

From
ESEric Sunshine <ericsunshine@gmail.com>
Date
Oct 10, 2010, 21:19 UTC
Message-ID
<4CB22DCD.8080806@gmail.com>
In-Reply-To
<AANLkTinP7RKOhLFZs71P5dpmA1p1OsjikSmVv5WkkL1z@mail.gmail.com>
On 10/10/2010 4:20 PM, Erik Faye-Lund wrote:
Show 49 quoted lines
> On Sun, Oct 10, 2010 at 9:40 PM, Eric Sunshine<ericsunshine@gmail.com>  wrote:
>> On 10/10/2010 9:20 AM, Erik Faye-Lund wrote:
>>>
>>> From: Mike Pape<dotzenlabs@gmail.com>
>>>
>>> git-daemon requires some socket-functionality that is not yet
>>> supported in the Windows-port. This patch adds said functionality,
>>> and makes sure WSAStartup gets called by socket(), since it is the
>>> first network-call in git-daemon. In addition, a check is added to
>>> prevent WSAStartup (and WSACleanup, though atexit) from being
>>> called more than once, since git-daemon calls both socket() and
>>> gethostbyname().
>>>
>>> Signed-off-by: Mike Pape<dotzenlabs@gmail.com>
>>> Signed-off-by: Erik Faye-Lund<kusmabite@gmail.com>
>>> ---
>>> diff --git a/compat/mingw.c b/compat/mingw.c
>>> index 6590f33..563ef1f 100644
>>> --- a/compat/mingw.c
>>> +++ b/compat/mingw.c
>>> +#undef accept
>>> +int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz)
>>> +{
>>> +       int sockfd2;
>>> +
>>> +       SOCKET s1 = (SOCKET)_get_osfhandle(sockfd1);
>>> +       SOCKET s2 = accept(s1, sa, sz);
>>> +
>>> +       /* convert into a file descriptor */
>>> +       if ((sockfd2 = _open_osfhandle(s2, O_RDWR|O_BINARY))<    0) {
>>> +               closesocket(s2);
>>> +               return error("unable to make a socket file descriptor:
>>> %s",
>>> +                       strerror(errno));
>>
>> Is 'errno' from _open_osfhandle() still valid when handed to strerror() or
>> has it been clobbered by closesocket()?
>>
>> Corollary: Does _open_osfhandle() indeed set 'errno', or is it more
>> appropriate to call WSAGetLastError()? (The documentation I read for
>> _open_osfhandle() did not say anything about how to determine the reason for
>> failure.)
>>
>
> _open_osfhandle seems to set both errno and the winsock-error.
> closesocket() sets the winsock-error but not the CRT. I've just tested
> with a very simple application:
> So, it seems that WSAGetLastError() gets clobbered by closesocket(),
> but not errno.

Thank you for checking. Even if it is not strictly needed in this case, for the sake of clarity (and to avoid having this question repeated in the future), it might be worthwhile to save 'errno' or the result of WSAGetLastError() in a temporary before invoking closesocket(), and then pass the temporary to strerror().

-- ES
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 5 of 43 in “daemon-win32”
  1. 00/14 daemon-win32Erik Faye-Lund, Oct 10, 2010
  2. 01/14 mingw: add network-wrappers for daemonErik Faye-Lund, Oct 10, 2010
  3. Eric SunshineOct 10, 2010
  4. Erik Faye-LundOct 10, 2010
  5. Eric SunshineOct 10, 2010
  6. 02/14 mingw: implement syslogErik Faye-Lund, Oct 10, 2010
  7. Eric SunshineOct 10, 2010
  8. Erik Faye-LundOct 10, 2010
  9. Johannes SixtOct 10, 2010
  10. Erik Faye-LundOct 10, 2010
  11. Eric SunshineOct 10, 2010
  12. Erik Faye-LundOct 10, 2010
  13. Erik Faye-LundOct 10, 2010
  14. Eric SunshineOct 10, 2010
  15. Erik Faye-LundOct 11, 2010
  16. Erik Faye-LundOct 11, 2010
  17. 03/14 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Oct 10, 2010
  18. 04/14 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Oct 10, 2010
  19. 05/14 mingw: use real pidErik Faye-Lund, Oct 10, 2010
  20. Eric SunshineOct 10, 2010
  21. Erik Faye-LundOct 10, 2010
  22. Eric SunshineOct 10, 2010
  23. 06/14 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Oct 10, 2010
  24. 07/14 mingw: add kill emulationErik Faye-Lund, Oct 10, 2010
  25. 08/14 daemon: use run-command api for async servingErik Faye-Lund, Oct 10, 2010
  26. Eric SunshineOct 10, 2010
  27. Erik Faye-LundOct 10, 2010
  28. 09/14 daemon: use full buffered mode for stderrErik Faye-Lund, Oct 10, 2010
  29. 10/14 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Oct 10, 2010
  30. 11/14 daemon: report connection from root-processErik Faye-Lund, Oct 10, 2010
  31. Johannes SixtOct 10, 2010
  32. Erik Faye-LundOct 10, 2010
  33. Erik Faye-LundOct 10, 2010
  34. Ævar Arnfjörð BjarmasonOct 10, 2010
  35. Erik Faye-LundOct 10, 2010
  36. 12/14 mingw: import poll-emulation from gnulibErik Faye-Lund, Oct 10, 2010
  37. Ævar Arnfjörð BjarmasonOct 10, 2010
  38. Erik Faye-LundOct 10, 2010
  39. Erik Faye-LundOct 10, 2010
  40. Ævar Arnfjörð BjarmasonOct 10, 2010
  41. 13/14 mingw: use poll-emulation from gnulibErik Faye-Lund, Oct 10, 2010
  42. 14/14 daemon: only use posix features on posix systemsErik Faye-Lund, Oct 10, 2010
  43. Ævar Arnfjörð BjarmasonOct 10, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.