Homebrew socat on OS X Mountain Lion, sctp "Protocol not supported"

I work a lot on a hobby program that includes the SCTP protocol to understand the basics, I tried to install socat using homebrew , socat is a tool like netcat for testing various protocols. But without success on OS X Mountain Lion yet. Here is the installation and error log:

$ brew install socat ==> Installing socat dependency: readline ==> Downloading http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz ######################################################################## 100.0% tar: Failed to set default locale ==> Patching patching file callback.c patching file input.c patching file patchlevel patching file support/shobj-conf patching file vi_mode.c ==> ./configure --prefix=/usr/local/Cellar/readline/6.2.4 --mandir=/usr/local/Ce ==> make install ==> Caveats This formula is keg-only: so it was not symlinked into /usr/local. OS X provides the BSD libedit library, which shadows libreadline. In order to prevent conflicts when programs look for libreadline we are defaulting this GNU Readline installation to keg-only. Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables: LDFLAGS: -L/usr/local/opt/readline/lib CPPFLAGS: -I/usr/local/opt/readline/include ==> Summary ?? /usr/local/Cellar/readline/6.2.4: 31 files, 1.6M, built in 34 seconds ==> Installing socat ==> Downloading http://www.dest-unreach.org/socat/download/socat-1.7.2.1.tar.bz2 ######################################################################## 100.0% tar: Failed to set default locale ==> Downloading patches ######################################################################## 100.0% ==> Patching patching file xioexit.c ==> ./configure --prefix=/usr/local/Cellar/socat/1.7.2.1 --mandir=/usr/local/Cel ==> make install /usr/local/Cellar/socat/1.7.2.1: 8 files, 624K, built in 41 seconds 

You see that homebrew successfully completed the compilation and installed socat . To verify that SCTP is enabled

 $ socat -V socat by Gerhard Rieger - see www.dest-unreach.org socat version 1.7.2.1 on Mar 25 2013 08:43:00 running on Darwin version Darwin Kernel Version 12.2.1: Thu Oct 18 12:13:47 PDT 2012; root:xnu-2050.20.9~1/RELEASE_X86_64, release 12.2.1, machine x86_64 features: #define WITH_STDIO 1 #define WITH_FDNUM 1 #define WITH_FILE 1 #define WITH_CREAT 1 #define WITH_GOPEN 1 #define WITH_TERMIOS 1 #define WITH_PIPE 1 #define WITH_UNIX 1 #undef WITH_ABSTRACT_UNIXSOCKET #define WITH_IP4 1 #define WITH_IP6 1 #define WITH_RAWIP 1 #define WITH_GENERICSOCKET 1 #undef WITH_INTERFACE #define WITH_TCP 1 #define WITH_UDP 1 #define WITH_SCTP 1 #define WITH_LISTEN 1 #define WITH_SOCKS4 1 #define WITH_SOCKS4A 1 #define WITH_PROXY 1 #define WITH_SYSTEM 1 #define WITH_EXEC 1 #define WITH_READLINE 1 #undef WITH_TUN #define WITH_PTY 1 #define WITH_OPENSSL 1 #undef WITH_FIPS #undef WITH_LIBWRAP #define WITH_SYCLS 1 #define WITH_FILAN 1 #define WITH_RETRY 1 #define WITH_MSGLEVEL 0 /*debug*/ 

Try a simple SCTP connection

 $ socat - sctp4:my_server:19191 2013/03/25 08:45:46 socat[18838] E socket(2, 1, 132): Protocol not supported 

And it failed. OS X support is announced on the socat homepage, but apparently sctp migh is not. Perhaps too few people use sctp, and I googled this whole error and did not find anything useful.

I tried the same thing on a Gentoo / Debian server, and they both worked fine, I just can't get it to work under OS X. I'm new to OS X, please, any tips?

+4
source share
1 answer

It looks like the OS X header files know about SCTP, but the libraries don't actually implement it. You can hack it with third-party extensions.

I get the same thing on OS X 10.8.3. When installing socat, it discovers SCTP support in configure and sets this WITH_SCTP definition.

  $ ./configure |  grep -i sctp
 configure: WARNING: include file netpacket / packet.h not found, disabling interface
 checking whether to include SCTP support ... yes
 checking for IPPROTO_SCTP ... yes

However, if you look at configure , this is a really simple test. "Enable SCTP support" is to specify the --enable-sctp option and is enabled by default. And the "check for IPPROTO_SCTP" simply determines if a protocol constant is defined in the header files. That is, headers may know this protocol and be relevant to its presentation, but the underlying system may not actually implement the use. I think this is the case: the OS X kernel does not provide an SCTP implementation.

There is "preliminary" third-party SCTP support in new versions of OS X: https://nplab.fh-muenster.de/groups/wiki/wiki/f366c/ . Installing this received SCTP works for me at homebrew socat .

  [@ in ~]
 $ socat -d -d sctp-listen: 99999 -
 2013/04/24 22:19:38 socat [270] E socket (2, 1, 132): Protocol not supported
 2013/04/24 22:19:38 socat [270] N exit (1)
 [✘ @ in ~]
 $ sudo kextload /System/Library/Extensions/SCTP.kext
 [✘ @ in ~]
 $ socat -d -d -d sctp-listen: 99999 -
 [... snip ...]
 2013/04/24 22:20:51 socat [291] I socket (2, 1, 132) -> 3
 2013/04/24 22:20:51 socat [291] I starting accept loop
 2013/04/24 22:20:51 socat [291] N listening on LEN = 16 AF = 2 0.0.0.0{4463

Caution : this is a third-party kernel extension, it is "preliminary", there is not much documentation, and I can not vouch for the source. This is likely to be fragile, and it can be difficult to repair errors. I would do it in a virtual machine, not on your main machine. Virtual machines are great for experimenting with low-level materials and various machine configurations. (Example: to find out this question, I did a bunch of messing around with my machine and some dubious things like root, and then, I returned my virtual machine to a snapshot, and as if that hadn't happened.)

Another option is to look at SCTP "userland" support (not the kernel) in libusrsctp , available in Homebrew. This will not cause socat to work with SCTP, but may support your other programming hobby.

+1
source

All Articles