+int _OpenIf(int DestFD, const struct sockaddr *addr, const char *file, int *port)
+{
+ const uint8_t *addrBuffer = NULL;
+ size_t addrLen = 0;
+
+ addrLen = _getAddrData(addr, (const void **)&addrBuffer, port);
+ if( addrLen == 0 ) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ char hexAddr[addrLen*2+1];
+ int bNonZero = 0;
+ for( int i = 0; i < addrLen; i ++ ) {
+ hexAddr[i*2+0] = "0123456789ABCDEF"[addrBuffer[i] >> 4];
+ hexAddr[i*2+1] = "0123456789ABCDEF"[addrBuffer[i] & 15];
+ if(addrBuffer[i]) bNonZero = 1;
+ }
+ hexAddr[addrLen*2] = 0;
+
+ char *path;
+ if( bNonZero )
+ path = mkstr("/Devices/ip/routes/@%i:%s/%s", addr->sa_family, hexAddr, file);
+ else
+ path = mkstr("/Devices/ip/*%i/%s", addr->sa_family, file);
+
+ int ret = _SysReopen(DestFD, path, OPENFLAG_RDWR);
+ _SysDebug("libpsocket: _SysReopen(%i, '%s') = %i", DestFD, path, ret);
+ free(path);
+ // TODO: Error-check?
+ return ret;
+}
+
+int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
+{
+ t_sockinfo *si = _GetInfo(sockfd);
+ if( !si || si->remote ) {
+ _SysDebug("connect: FD %i already connected", sockfd);
+ errno = EALREADY;