Tiago Jorge wrote:
ok... maybe this is my problem regarding another thread in the hackers list... can this be solved using "select"? Because i must have a listen socket and a sending socket... so if my l4 server has a socket in a select wainting for input, should it be able to send throught another socket?
following my last emails... i've tried with select and it doesn't work also. So... before a build a separate server just to relay my messages, is it possible to change the blocking state of a socket. I've seen that the l4vfs implementation of fcntl its just a dummy implementation
Well, my fcntl() looks as follows:
int fcntl( int fd, int cmd, ... ) { file_desc_t fdesc; int ret; long arg; struct flock *lock; va_list list;
if (! ft_is_open(fd)) { errno = EBADF; return -1; }
fdesc = ft_get_entry(fd);
if (l4_is_invalid_id(fdesc.server_id)) { // should not happen errno = EBADF; return -1; }
lock = NULL;
va_start( list, cmd ); switch( cmd ) { case F_GETLK: case F_SETLK: case F_SETLKW: lock = va_arg( list, struct flock * ); break; case F_DUPFD: case F_SETFD: case F_SETFL: //case F_SETOWN: //case F_SETSIG: //case F_SETLEASE: //case F_NOTIFY: arg = va_arg( list, long ); break; default: // no arg arg = 0; break; } va_end( list );
// fixme: we don't need to call the server allways, e.g. for // F_DUPFD which works locally completely! others?
// now we can call the server if (lock) { // hmm. dice doesn't recognize struct flock definition in fcntl.h // ret = l4vfs_fcntl_flock(fdesc.server_id, // fdesc.object_handle, // cmd, // lock, // sizeof(*lock) ); LOG("F_GETLK, F_SETLK, F_SETLKW not supported"); ret = -EINVAL; } else ret = l4vfs_fcntl(fdesc.server_id, fdesc.object_handle, cmd, (l4_int32_t *) &arg ); return ret; }
I therefore do not consider it to be "dummy".
L4VFS is meant to be extended on a use-case basis, it has grown over the last 1 1/2 years as other projects utilized it. Maybe you have to extend it a little bit. We gladly accept patches (hint, hint).
L4VFS is not meant as a complete posix compliant multiserver unix replacement!
so my question is... is it possible throught another l4vfs method or something in FLIPS to do non-blocking IO in sockets/file descriptors?
You could open a file in nonblocking mode using open(..., O_NONBLOCK) if the corresponding server supports this.
Greets, Martin