> -----Original Message-----
> From: Alan Conway [mailto:acon...@redhat.com] 
> 
> Manuel Teira Paz wrote:
> > Alan Conway escribió:
> >> Manuel Teira Paz wrote:
> >>  
> >>> Hello again.
> >>>
> >>> During the compilation stage of the trunk, I run into this
error:
> >>>
> >>>
> >>> source='qpid/broker/Bridge.cpp' object='qpid/broker/Bridge.lo' 
> >>> libtool=yes \
> >>> DEPDIR=.deps depmode=dashXmstdout /bin/bash ../build-aux/depcomp
\
> >>> /bin/bash ../libtool --tag=CXX    --mode=compile CC -g -m64 
> >>> -DHAVE_CONFIG_H -I. -Igen -I./gen     -I/opt/qpid/include 
> >>> -library=stlport4 -mt -c -o qpid/broker/Bridge.lo 
> qpid/broker/Bridge.cpp
> >>> CC -g -m64 -DHAVE_CONFIG_H -I. -Igen -I./gen -I/opt/qpid/include

> >>> -library=stlport4 -mt -c qpid/broker/Bridge.cpp  -KPIC -DPIC -o 
> >>> qpid/broker/.libs/Bridge.o
> >>> "./qpid/sys/Socket.h", line 96: Error: socklen_t is not defined.
> >>> "qpid/broker/Bridge.cpp", line 170: Warning: id hides 
> >>> qpid::broker::Bridge::id.
> >>> 1 Error(s) and 1 Warning(s) detected.
> >>>
> >>> I started looking in my Solaris system, where socklen_t 
> is defined, 
> >>> and the place was sys/socket.h. Nevertheless, I see that the way

> >>> integer types are intended to be imported now regardless 
> the platform 
> >>> is:
> >>> qpid/sys/IntegerTypes.h
> >>>
> >>> that relies on a platform dependent file.
> >>>
> >>> The question here is, where exactly the socklen_t is 
> suposed to be 
> >>> defined in linux or a posix compliant system? The posix 
> >>> IntegerTypes.h in qpid is just including <stdint.h>, but 
> after a fast 
> >>> look in an Ubuntu system, I didn't find there any declaration
for 
> >>> socklen_t. Another curious thing about socklen_t is what 
> I've found 
> >>> here:
> >>>
> >>> 
> http://portabilityblog.com/blog/archives/7-socklen_t-confusion.html
> >>>
> >>> Also, the declaration for solaris is not trivial:
> >>>
> >>>
> >>> #if defined(_XPG4_2) && !defined(_XPG5) && !defined(_LP64)
> >>> typedef size_t          socklen_t;
> >>> #else
> >>> typedef uint32_t        socklen_t;
> >>> #endif  /* defined(_XPG4_2) && !defined(_XPG5) && 
> !defined(_LP64) */
> >>>
> >>>
> >>> Anyway, it seems to rely to uint32_t on normal cases.
> >>>
> >>>
> >>> What do you think is the best way to proceed here? Just add a 
> >>> #include <sys/socket.h> in the posix IntegerTypes.h?     
> >>
> >> I would only #include socket.h in network-related files that need

> >> socklen_t, it's not really a generic integer type it's specific
to 
> >> sockets. Where is it being used that we're not already including 
> >> socket.h?
> >>
> >>   
> > In qpid/sys/Socket.h.
> > 
> > Furthermore, socklen_t is defined for the windows platform in
their 
> > specific IntegerTypes.h, that was what led me to think that
perhaps 
> > including socket.h in the posix counterpart, could be a (somewhat)

> > coherent move.
> > 
> > Another posibility would be to include sys/socket.h in 
> > qpid/sys/Socket.h. But since this is not posix specific, 
> perhaps the 
> > windows port could get damaged.
> 
> That would be my preference, check with Steve if it's OK on 
> windows. I'm fairly 
> sure it is. If not you could add a sys/socklen.h with an 
> #ifdef to include the 
> appropriate file and include that in Socket.h.

Adding a #include <sys/socket.h> would require a platform-specific
ifdef, which I thought were highly frowned on. The approach taken in
similar situations is to add a platform-specific header file
(qpid/sys/posix/sys_socket.h or similar) and include that from
qpid/sys/Socket.h.

I put the socklen_t typedef for Windows in IntegerTypes.h because
Windows doesn't define socklen_t anywhere.

-Steve


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to