Słusznie się domyśliłeś. Jest to zwykłe rzutowanie jakiegoś typu na wskaźnik typu SOCKADDR. Przykładowy fragment kodu z użyciem tego:
struct SOCKADDR
{
int pole;
};
int main()
{
SOCKADDR obiekt;
void * wsk1 = &obiekt;
SOCKADDR * wsk2 = (SOCKADDR*)wsk1;
// Wspolczesna zalecana wersja
SOCKADDR * wsk2 = reinterpret_cast<SOCKADDR*>wsk1;
}
Niżej pokazuję też rzutowanie przy pomocy specjalnego operatora. Pisząc programy w współczesnym C++ warto stosować te operatory.
Zapytasz dlaczego. Przecież są długie w zapisie. Odpowiem: i o to właśnie chodzi. reinterpret_cast zawsze oznacza rzutowanie wskaźnika. Z daleka programista widzi co się dzieje w danej linijce kodu. Nie musiałbyś wtedy pisać tego pytania na forum :-)
No i rzutowanie to w ogóle nietypowa operacja i często jest źródłem wszelkiego rodzaju błędów w programach. Dlatego w C++ stosuje się te długie operatory. Pierwszy link z Google: http://strefakodera.pl/programowanie/c/operatory-rzutowania-w-c