LINUX.ORG.RU

inet_ntoa vs pthread


0

0

В мане написано, что результат inet_ntoa сохраняется в статическом буфере, последующие вызовы inet_ntoa перепишут его содержимое. Это получается, что при активном использовании этой функции в тредах можно схватить segm fault? При использовании этой функции треды нужно разводить мутексами ?

anonymous

>Это получается, что при активном использовании этой функции в тредах можно схватить segm fault?

нет. всего лиш иногда вернёт непредсказуемое значение/мусор.

сегфолт будет в случае если вы этот мусор некорректно обработаете

>При использовании этой функции треды нужно разводить мутексами ?

оно самое. типа написать враппер inet_ntoa_r() и в нём сделать разводку мутексами или что там вам больше по душе.

cvv ★★★★★
()
Ответ на: комментарий от cvv

>>При использовании этой функции треды нужно разводить мутексами ?

> оно самое. типа написать враппер inet_ntoa_r() и в нём сделать разводку мутексами или что там вам больше по душе.

а лучше просто использовать inet_ntop()

lg ★★
()
Ответ на: комментарий от cvv

> не thread-safe по крайней мере на hp-unix

a) кого это волнует? b) кто сказал? ссылку.
главное, что это thread safe в POSIX.

http://www.opengroup.org/onlinepubs/009695399/functions/inet_ntop.html

как вариант реализации - thread safe в BSD и, скорее всего, в Linux.

ps: вы уже написали PR в HP-UX?
pps: в очередной раз вы делаете одну и ту-же [фатальную] ошибку: отталкиваетесь не от оффициального стандарта, а от бог знает чего :-/ не надоело?

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

>> не thread-safe по крайней мере на hp-unix

>a) кого это волнует? 

во первых нигде не написано что человека интересует только linux-реализация посему для полноты картины не помешает

>b) кто сказал? ссылку.

man 5 tread_safety

...

Interfaces That Are Not thread-safe    [Toc]    [Back]
      All the interfaces are thread-safe except:

      bgets()              bufsplit()   copylist()        dbmclose()
      dbminit()            delete()     endmntent()       fattach()
      fdetach()            fetch()      firstkey()        getc_unlocked()
      getchar_unlocked()   getopt()     inet_ntop()       inet_pton()
      isastream()          nextkey()    putc_unlocked()   putchar_unlocked()
      setmntent()          store()      strord()          strtold()

...

>главное, что это thread safe в POSIX.

не думаю. нигде не написано что реализация автора соответствует posix.

>pps: в очередной раз вы делаете одну и ту-же [фатальную] ошибку: отталкиваетесь не от оффициального стандарта, а от бог знает чего :-/ не надоело?

а может я уже выспался??

cvv ★★★★★
()
Ответ на: комментарий от cvv

> не думаю. нигде не написано что реализация автора соответствует posix.

автора в смысле HP-UX? судя по

http://docs.hp.com/en/B2355-60127/inet6.3N.html

"AUTHOR: These inet routines were developed by the University of California, Berkeley.".

-> вообще ничего не сказано на тему - чему собственно соответствует их реализация. "было когда-то сделано в Беркли" IMHO хоть убейте не тянет на "ссылку на стандарт". видимо, ребята в HP-UP могут себе это позволить :-/

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

я имел ввиду что автор треда не написал для какой системы он разрабатывает приложение. сюда ведь забегают и с вопросами по фре и солярке а не только linux+glibc.

cvv ★★★★★
()
Ответ на: комментарий от cvv

8-DD это надо было умудриться написать inet_ntop() не thread-safe респект им за это - улыбнуло :)

lg ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.