TServerSocket fix for MSVC
--------------------------

                 Key: THRIFT-1433
                 URL: https://issues.apache.org/jira/browse/THRIFT-1433
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library
    Affects Versions: 0.8
         Environment: Windows Visual Studio 2010
            Reporter: Peace C
             Fix For: 0.8


The changes to compile the Thrift library for Visual Studio #ifdef'd out the 
bind section in TServerSocket.cpp. This prevented TSimpleServer, 
TThreadedServer and anything that uses TServerSocket transport from 
functioning.  The server side reports the following error due to 'bind' being 
skipped:
TSimpleServer::run() listen(): Could not listen: errno = 10022

The bind overload unfortunately results in a conflict with Microsoft's 
libraries. TServerSocket uses namespace std which pulls in the tr1 overloads of 
bind. The template definitions seem to always 'win' over any other overloads. I 
was unsuccessful creating an overload of bind in the windows config.h file so 
had to #ifdef the bind call. Microsoft is aware of the issue:
http://connect.microsoft.com/VisualStudio/feedback/details/500364/how-to-avoid-conflicts-between-tr1-bind-and-winsock-bind-function

It does the job though I'm not too proud of using #ifdefs. One possible way 
around this is to declare a wrapper function as such in config.h:

inline int thriftbind(SOCKET socket, sockaddr* name, int namelen)
{
    return ::bind(socket, name, namelen);
}

The Unix-style version would need to be declared in the appropriate file as 
well.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to