Re: sosend() and mbuf



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@xxxxxx>:
[please cc: the list]

Maslan <maslanbsd@xxxxxxxxx> 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@xxxxxx

_______________________________________________
freebsd-hackers@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@xxxxxxxxxxx"



Relevant Pages