> normalde bildiginiz uzere soket fonksiyonu root yetkisi ile calistirilan
bir fonksiyon,

Biz böyle bir fonksiyon bilmiyoruz. Biz bilmiyorsak, emin olabilirsiniz ki,
öyle bir fonksiyonda yoktur ortada :)

> c ile udp uzerinden data gonderen

Yani size UDP soketi lazım (SOCK_DGRAM)

> if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))

Ama siz raw soket açıyorsunuz.

> fprintf(stderr,"socket() error, root ?\n");

Bu satırı şu hale çevirip çalıştırmayı deneyin:

fprintf(stderr,"socket() error:%d '%s' root ?\n", errno, strerror(errno));

Bunu yaptıktan sonra yazan mesaja bakarsanız, sorunun ne olduğu daha kolay
anlaşılabilecektir. Bir ihtimal kernelde RAW soket desteği yoktur vs.
getcap() ile bir kontrol edebilirsiniz.


2011/5/13 Cihat YILDIZ <[email protected]>

> Merhabalar
>
> c ile udp uzerinden data gonderen bir uygulama yapmaya calisiyorum. Ancak
> cok ilginc bir hata aldim.
> normalde bildiginiz uzere soket fonksiyonu root yetkisi ile calistirilan
> bir fonksiyon,
> normal bir kullanici ile bu fonksiyou calistirmak istediginizde size -1
> degeri gonde ver siz bunu calistiramazsiniz.
>
> Benim karsilastigim hata ise ayni problemi root olarak yasamak. root
> kullanicisi ile programi calistirmak istedigimde
> yine fonksiyon bana -1 degeri ile donus yapiyor.
>
> fonksiyonu su sekilde kullaniyorum.
>
> if ((sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) // root privilege
> required
> {
> fprintf(stderr,"socket() error, root ?\n");
>         exit(1);
>     }
> ---
> Cihat YILDIZ
> Electronics Engineer
>
>
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
>
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap