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.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to