Flips tracking of IPC
Martin Pohlack
mp26 at os.inf.tu-dresden.de
Tue May 3 12:42:01 CEST 2005
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
More information about the l4-hackers
mailing list