sosend() and mbuf
Maslan
maslanbsd at gmail.com
Mon Aug 3 21:25:30 UTC 2009
No my code doesn't work, I thought it may be because that soaccept()
-which is not found in man 9- is non-blocking, so i've to put my code
in a thread.
Now i got another problem, when I open a text file from this thread,
the kernel crashes, I'm sure that its the thread.
kthread_create((void *)thread_main, NULL, NULL, RFNOWAIT, 0, "thread");
void thread_main(){
struct thread *td = curthread;
int ret;
int fd;
ret = f_open("/path/to/file.txt", &fd);
printf("%d\n", ret);
tsleep(td, PDROP, "test tsleep", 10*hz);
f_close(fd);
kthread_exit(0);
}
int f_open(char *filename, int *fd){
struct thread *td = curthread;
int ret = kern_open(td, filename, UIO_SYSSPACE, O_RDONLY, FREAD);
if(!ret){
*fd = td->td_retval[0];
return 1;
}
return 0;
}
I've to finish up this problem to go back for the first one.
Can you figure out what's wrong with this code, it works when I call
thread_main() rather than kthread_create((void *)thread_main, .....
Thanks a lot
2009/8/3 Dag-Erling Smørgrav <des at des.no>:
> [please cc: the list]
>
> Maslan <maslanbsd at gmail.com> writes:
>> man 9 sosend:
>> Data may be sent directly from kernel or user memory via the uio
>> argument, or as an mbuf chain via top, avoid- ing a data copy.
>> Only one of the uio or top pointers may be non-NULL
>
> Hmm, I missed that part. It never occurred to me to *not* use mbufs.
>
> I guess the question is: what is your question? Does your code work?
> If it doesn't, where and how does it fail? If it does, why are you
> asking?
>
> In any case, 'man 9 sosend' answers the "I can't find useful information
> on sosend()" part of your email. If you still have questions after
> reading that, try looking at existing kernel code that uses sosend(9)
> with iovecs (or with mbufs, if you decide to go that route).
>
> DES
> --
> Dag-Erling Smørgrav - des at des.no
>
More information about the freebsd-hackers
mailing list