Flips tracking of IPC

Tiago Jorge tjpj at lasige.di.fc.ul.pt
Tue May 3 14:39:16 CEST 2005


Martin Pohlack wrote:

>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).
>  
>
;)... ok i've understood the hint.
but the dummy i've talked about was the implementation of 
l4vfs_*_fcntl_component(...).
that is the implementation of the dielibc... bue when it calls the 
server side function it's not implemented.
my question was if in one of those projects someone implemented it

thanks again

Tiago

>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